From 7704affdc532e4c58dc04b05135fb1b1d7ddf0a1 Mon Sep 17 00:00:00 2001 From: wxy Date: Fri, 6 Jan 2017 21:11:26 +0800 Subject: [PATCH 01/22] PROOF:20161012 Introduction to FirewallD on CentOS @geekpi --- ...012 Introduction to FirewallD on CentOS.md | 295 +++++++----------- 1 file changed, 118 insertions(+), 177 deletions(-) diff --git a/translated/tech/20161012 Introduction to FirewallD on CentOS.md b/translated/tech/20161012 Introduction to FirewallD on CentOS.md index 6a84431bc3..6f81f890f1 100644 --- a/translated/tech/20161012 Introduction to FirewallD on CentOS.md +++ b/translated/tech/20161012 Introduction to FirewallD on CentOS.md @@ -1,157 +1,132 @@ -在CentOS 上介绍 FirewallD +CentOS 上的 FirewallD 简明指南 ============================================================ +[FirewallD][4] 是 iptables 的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables 相比,使用 FirewallD 有两个主要区别: -[FirewallD][4] 是iptables的前端控制器,用于实现持久网络流量规则。它提供命令行和图形界面,在大多数Linux发行版的仓库中都有。与直接控制iptables相比,使用 FirewallD 有两个主要区别: +1. FirewallD 使用区域和服务而不是链式规则。 +2. 它动态管理规则集,允许更新规则而不破坏现有会话和连接。 -1. FirewallD 使用 _zones_ 和 _services_ 而不是链式规则。 -2. 它动态管理规则集,允许更新而不破坏现有会话和连接。 +> FirewallD 是 iptables 的一个封装,可以让你更容易地管理 iptables 规则 - 它并*不是* iptables 的替代品。虽然 iptables 命令仍可用于 FirewallD,但建议使用 FirewallD 时仅使用 FirewallD 命令。 -> FirewallD是 iptables 的一个封装,允许更容易地管理 iptables 规则 - 它并*不是* iptables 的替代品。虽然 iptables 命令仍可用于 FirewallD,但建议仅在 FirewallD 中使用 FirewallD 命令。 - -本指南将向您介绍 FirewallD的 zone 和 service 的概念,以及一些基本的配置步骤。 +本指南将向您介绍 FirewallD 的区域和服务的概念,以及一些基本的配置步骤。 ### 安装与管理 FirewallD -CentOS 7 和 Fedora 20+ 已经包含了 FirewallD 但是默认没有激活。像其他 systemd 单元那样控制它。 +CentOS 7 和 Fedora 20+ 已经包含了 FirewallD,但是默认没有激活。可以像其它的 systemd 单元那样控制它。 -1. 启动服务,并在启动时启动该服务: +1、 启动服务,并在系统引导时启动该服务: - - ``` - sudo systemctl start firewalld - sudo systemctl enable firewalld - ``` +``` +sudo systemctl start firewalld +sudo systemctl enable firewalld +``` - 要停止并禁用: +要停止并禁用: - - ``` - sudo systemctl stop firewalld - sudo systemctl disable firewalld - ``` - +``` +sudo systemctl stop firewalld +sudo systemctl disable firewalld +``` -2. 检查firewall状态。输出应该是 `running` 或者 `not running`。 +2、 检查防火墙状态。输出应该是 `running` 或者 `not running`。 - - ``` - sudo firewall-cmd --state - ``` - +``` +sudo firewall-cmd --state +``` -3. 要查看 FirewallD 守护进程的状态: +3、 要查看 FirewallD 守护进程的状态: +``` +sudo systemctl status firewalld +``` - ``` - sudo systemctl status firewalld - ``` - +示例输出 - 示例输出 +``` +firewalld.service - firewalld - dynamic firewall daemon + Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled) + Active: active (running) since Wed 2015-09-02 18:03:22 UTC; 1min 12s ago + Main PID: 11954 (firewalld) + CGroup: /system.slice/firewalld.service + └─11954 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid +``` - - ``` - firewalld.service - firewalld - dynamic firewall daemon - Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled) - Active: active (running) since Wed 2015-09-02 18:03:22 UTC; 1min 12s ago - Main PID: 11954 (firewalld) - CGroup: /system.slice/firewalld.service - └─11954 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid - ``` - +4、 重新加载 FirewallD 配置: -4. 重新加载 FirewallD 配置: - - - ``` - sudo firewall-cmd --reload - ``` - +``` +sudo firewall-cmd --reload +``` ### 配置 FirewallD -FirewallD 使用 XML 进行配置。除非是非常具体的配置,你不必处理它们,而应该使用 ** firewall-cmd **。 +FirewallD 使用 XML 进行配置。除非是非常特殊的配置,你不必处理它们,而应该使用 `firewall-cmd`。 配置文件位于两个目录中: -* `/usr/lib/FirewallD` 保存默认配置,如默认 zone 和公共 service。 避免更新它们,因为这些文件将被每个 firewalld 包更新覆盖。 -* `/etc/firewalld` 保存系统配置文件。 这些文件将覆盖默认配置。 +* `/usr/lib/FirewallD` 下保存默认配置,如默认区域和公用服务。 避免修改它们,因为每次 firewall 软件包更新时都会覆盖这些文件。 +* `/etc/firewalld` 下保存系统配置文件。 这些文件将覆盖默认配置。 -### 配置集 +#### 配置集 -FirewallD 使用两个_配置集_:Runtime 和 Permanent。 在重新启动或重新启动 FirewallD 时,不会保留运行时的配置更改,而永久更改不会应用于正在运行的系统。 +FirewallD 使用两个_配置集_:“运行时”和“持久”。 在系统重新启动或重新启动 FirewallD 时,不会保留运行时的配置更改,而对持久配置集的更改不会应用于正在运行的系统。 -默认情况下,`firewall-cmd` 命令适用于运行时配置,但使用 `--permanent` 标志将建立持久配置。要添加和激活永久性规则,你可以使用两种方法之一。 - -1. 将规则同时添加到 permanent 和 runtime 中。 +默认情况下,`firewall-cmd` 命令适用于运行时配置,但使用 `--permanent` 标志将保存到持久配置中。要添加和激活持久性规则,你可以使用两种方法之一。 +1、 将规则同时添加到持久规则集和运行时规则集中。  - ``` - sudo firewall-cmd --zone=public --add-service=http --permanent - sudo firewall-cmd --zone=public --add-service=http - ``` - - -2. 将规则添加到 permanent 中并重新加载 FirewallD。 - +``` +sudo firewall-cmd --zone=public --add-service=http --permanent +sudo firewall-cmd --zone=public --add-service=http +``` + +2、 将规则添加到持久规则集中并重新加载 FirewallD。  - ``` - sudo firewall-cmd --zone=public --add-service=http --permanent - sudo firewall-cmd --reload - ``` - +``` +sudo firewall-cmd --zone=public --add-service=http --permanent +sudo firewall-cmd --reload +``` - > reload 命令会删除所有运行时配置并应用永久配置。因为firewalld 动态管理规则集,所以它不会破坏现有的连接和会话。 +> `reload` 命令会删除所有运行时配置并应用永久配置。因为 firewalld 动态管理规则集,所以它不会破坏现有的连接和会话。 -### Firewall Zone +### 防火墙的区域 -zone 是针对给定位置或场景(例如家庭、公共、受信任等)可能具有的各种信任级别的预构建规则集。不同的 zone 允许不同的网络服务和入站流量类型,而拒绝其他任何流量。 首次启用 FirewallD 后,_Public_ 将是默认 zone。 +“区域”是针对给定位置或场景(例如家庭、公共、受信任等)可能具有的各种信任级别的预构建规则集。不同的区域允许不同的网络服务和入站流量类型,而拒绝其他任何流量。 首次启用 FirewallD 后,`public` 将是默认区域。 -zone 也可以用于不同的网络接口。例如,对于内部网络和Internet的单独接口,你可以在内部 zone 上允许 DHCP,但在外部 zone 仅允许HTTP和SSH。未明确设置为特定区域的任何接口将添加到默认 zone。 - -要浏览默认的 zone: +区域也可以用于不同的网络接口。例如,要分离内部网络和互联网的接口,你可以在 `internal` 区域上允许 DHCP,但在`external` 区域仅允许 HTTP 和 SSH。未明确设置为特定区域的任何接口将添加到默认区域。 +要找到默认区域:  ``` sudo firewall-cmd --get-default-zone ``` - -要修改默认的 zone: +要修改默认区域: ``` sudo firewall-cmd --set-default-zone=internal ``` - -要查看你网络接口使用的 zone: +要查看你网络接口使用的区域: ``` sudo firewall-cmd --get-active-zones ``` - 示例输出: - ``` public interfaces: eth0 ``` - -要得到特定 zone 的所有配置: - +要得到特定区域的所有配置: ``` sudo firewall-cmd --zone=public --list-all ``` - 示例输出: - ``` public (default, active) interfaces: ens160 @@ -164,12 +139,11 @@ public (default, active) rich rules: ``` -要得到所有 zone 的配置: +要得到所有区域的配置:  ``` sudo firewall-cmd --list-all-zones ``` - 示例输出: @@ -198,185 +172,152 @@ work ``` -### 与 Service 一起使用 +#### 与服务一起使用 -FirewallD 可以根据特定网络服务的预定义规则允许相关流量。你可以创建自己的自定义系统规则,并将它们添加到任何 zone。 默认支持的服务的配置文件位于 `/usr/lib /firewalld/services`,用户创建的服务文件在`/etc/firewalld/services`中。 +FirewallD 可以根据特定网络服务的预定义规则来允许相关流量。你可以创建自己的自定义系统规则,并将它们添加到任何区域。 默认支持的服务的配置文件位于 `/usr/lib /firewalld/services`,用户创建的服务文件在 `/etc/firewalld/services` 中。 要查看默认的可用服务: - ``` sudo firewall-cmd --get-services ``` - 比如,要启用或禁用 HTTP 服务: -  ``` sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --remove-service=http --permanent ``` - -### 允许或者拒绝任意端口/协议 - -比如:允许或者禁用 12345 的 TCP 流量。 +#### 允许或者拒绝任意端口/协议 +比如:允许或者禁用 12345 端口的 TCP 流量。 ``` sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent sudo firewall-cmd --zone=public --remove-port=12345/tcp --permanent ``` - -### 端口转发 +#### 端口转发 下面是**在同一台服务器上**将 80 端口的流量转发到 12345 端口。 ``` sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345 -``` - +``` 要将端口转发到**另外一台服务器上**: -1. 在需要的 zone 中激活 masquerade。 +1、 在需要的区域中激活 masquerade。 + +``` +sudo firewall-cmd --zone=public --add-masquerade +``` + +2、 添加转发规则。例子中是将 IP 地址为 :123.456.78.9 的_远程服务器上_ 80 端口的流量转发到 8080 上。  - ``` - sudo firewall-cmd --zone=public --add-masquerade - ``` - - -2. 添加转发规则。例子中是将 IP 地址为:123.456.78.9 的_远程服务器上_ 80 端口的流量转发到 8080 上。 - - - ``` - sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9 - ``` - +``` +sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9 +``` 要删除规则,用 `--remove` 替换 `--add`。比如: - ``` sudo firewall-cmd --zone=public --remove-masquerade ``` - ### 用 FirewallD 构建规则集 -例如,以下是如何使用 FirewallD 为你的 Linode 配置基本规则(如果您正在运行 web 服务器)。 +例如,以下是如何使用 FirewallD 为你的服务器配置基本规则(如果您正在运行 web 服务器)。 -1. 将eth0的默认 zone 设置为 _dmz_。 在提供的默认 zone 中,dmz(非军事区)是最适合开始这个程序的,因为它只允许SSH和ICMP。 +1. 将 `eth0` 的默认区域设置为 `dmz`。 在所提供的默认区域中,dmz(非军事区)是最适合于这个程序的,因为它只允许 SSH 和 ICMP。 +``` +sudo firewall-cmd --set-default-zone=dmz +sudo firewall-cmd --zone=dmz --add-interface=eth0 +``` - ``` - sudo firewall-cmd --set-default-zone=dmz - sudo firewall-cmd --zone=dmz --add-interface=eth0 - ``` - - -2. 为 HTTP 和 HTTPS 添加永久服务规则到 dmz zone 中: +2、 把 HTTP 和 HTTPS 添加永久的服务规则到 dmz 区域中: +``` +sudo firewall-cmd --zone=dmz --add-service=http --permanent +sudo firewall-cmd --zone=dmz --add-service=https --permanent +```  - ``` - sudo firewall-cmd --zone=dmz --add-service=http --permanent - sudo firewall-cmd --zone=dmz --add-service=https --permanent - ``` +3、 重新加载 FirewallD 让规则立即生效: + +``` +sudo firewall-cmd --reload +```  +如果你运行 `firewall-cmd --zone=dmz --list-all`, 会有下面的输出: -3. 重新加载 FirewallD 让规则立即生效: - - - ``` - sudo firewall-cmd --reload - ``` +``` +dmz (default) + interfaces: eth0 + sources: + services: http https ssh + ports: + masquerade: no + forward-ports: + icmp-blocks: + rich rules: +```  - - 如果你运行 `firewall-cmd --zone=dmz --list-all`, 会有下面的输出: - - - - ``` - dmz (default) - interfaces: eth0 - sources: - services: http https ssh - ports: - masquerade: no - forward-ports: - icmp-blocks: - rich rules: - ``` - - - 这告诉我们,**dmz** zone 是我们的**默认** zone,它被分配到 **eth0 接口**中所有网络的**源**和**端口**。 允许传入 HTTP(端口80)、HTTPS(端口443)和 SSH(端口22)的流量,并且由于没有 IP 版本控制的限制,这些适用于 IPv4 和 IPv6。 **不允许伪装**以及**端口转发**。 我们没有** ICMP 块**,所以 ICMP 流量是完全允许的,没有** rich 规则**。 允许所有出站流量。 +这告诉我们,`dmz` 区域是我们的**默认**区域,它被用于 `eth0` 接口**中所有网络的**源地址**和**端口**。 允许传入 HTTP(端口 80)、HTTPS(端口 443)和 SSH(端口 22)的流量,并且由于没有 IP 版本控制的限制,这些适用于 IPv4 和 IPv6。 不允许**IP 伪装**以及**端口转发**。 我们没有 **ICMP 块**,所以 ICMP 流量是完全允许的。没有**丰富(Rich)规则**,允许所有出站流量。 ### 高级配置 -服务和端口适用于基本配置,但对于高级情景可能会太有限制。 rich 规则和 direct 接口允许你为任何端口、协议、地址和操作向任何 zone 添加完全自定义的防火墙规则。 +服务和端口适用于基本配置,但对于高级情景可能会限制较多。 丰富(Rich)规则和直接(Direct)接口允许你为任何端口、协议、地址和操作向任何区域 添加完全自定义的防火墙规则。 -### rich 规则 +#### 丰富规则 -rich 规则的语法有很多,但都完整地记录在 [firewalld.richlanguage(5)][5] 的手册页中(或在终端中 `man firewalld.richlanguage`)。 使用 `--add-rich-rule`、`--list-rich-rules` 、 `--remove-rich-rule` 和 firewall-cmd 命令来管理它们。 +丰富规则的语法有很多,但都完整地记录在 [firewalld.richlanguage(5)][5] 的手册页中(或在终端中 `man firewalld.richlanguage`)。 使用 `--add-rich-rule`、`--list-rich-rules` 、 `--remove-rich-rule` 和 firewall-cmd 命令来管理它们。 这里有一些常见的例子: -允许来自主机 192.168.0.14 的所有IPv4流量。 +允许来自主机 192.168.0.14 的所有 IPv4 流量。 - ``` sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept' ``` - 拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量。 - ``` sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' ``` - -允许来自主机 10.1.0.3 到 80 端口的IPv4 的 TCP 流量,并将流量转发到 6532 端口上。 - +允许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上。  ``` sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532' ``` +将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)。 -将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在 zone 上激活 masquerade)。 - - ``` sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2' ``` +列出你目前的丰富规则: -列出你目前的 rich 规则: - - ``` sudo firewall-cmd --list-rich-rules ``` - ### iptables 的直接接口 -对于最高级的使用,或对于 iptables 专家,FirewallD 提供了一个直接接口,允许你给它传递原始 iptables 命令。 直接接口规则不是持久的,除非使用 `--permanent`。 +对于最高级的使用,或对于 iptables 专家,FirewallD 提供了一个直接(Direct)接口,允许你给它传递原始 iptables 命令。 直接接口规则不是持久的,除非使用 `--permanent`。 要查看添加到 FirewallD 的所有自定义链或规则: - ``` firewall-cmd --direct --get-all-chains firewall-cmd --direct --get-all-rules ``` - 讨论 iptables 的具体语法已经超出了这篇文章的范围。如果你想学习更多,你可以查看我们的 [iptables 指南][6]。 ### 更多信息 @@ -393,7 +334,7 @@ via: https://www.linode.com/docs/security/firewalls/introduction-to-firewalld-on 作者:[Linode][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/) 荣誉推出 From 07621854bb8af2d393659a3434cc0f90b23a0ebc Mon Sep 17 00:00:00 2001 From: wxy Date: Fri, 6 Jan 2017 21:11:40 +0800 Subject: [PATCH 02/22] PUB:20161012 Introduction to FirewallD on CentOS @geekpi --- .../20161012 Introduction to FirewallD on CentOS.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {translated/tech => published}/20161012 Introduction to FirewallD on CentOS.md (100%) diff --git a/translated/tech/20161012 Introduction to FirewallD on CentOS.md b/published/20161012 Introduction to FirewallD on CentOS.md similarity index 100% rename from translated/tech/20161012 Introduction to FirewallD on CentOS.md rename to published/20161012 Introduction to FirewallD on CentOS.md From a4c6efedeeb9e436730e4477a1772c7cf6d80ec3 Mon Sep 17 00:00:00 2001 From: wxy Date: Sat, 7 Jan 2017 11:06:25 +0800 Subject: [PATCH 03/22] PROOF:20161128 Managing devices in Linux @erlinux --- .../20161128 Managing devices in Linux.md | 95 ++++++++++--------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/translated/tech/20161128 Managing devices in Linux.md b/translated/tech/20161128 Managing devices in Linux.md index c9aab3a1eb..f81a0afa82 100644 --- a/translated/tech/20161128 Managing devices in Linux.md +++ b/translated/tech/20161128 Managing devices in Linux.md @@ -1,38 +1,41 @@ -### 在 Linux 中管理设备 +在 Linux 中管理设备 +============= -探索 /dev 目录如何使您直接访问到 Linux 中的设备。 +探索 `/dev` 目录可以让您知道如何直接访问到 Linux 中的设备。 ![Managing devices in Linux](https://opensource.com/sites/default/files/styles/image-full-size/public/images/life/OSDC_Penguin_Image_520x292_12324207_0714_mm_v1a.png itok=WfAkwbFy "Managing devices in Linux") *照片提供:Opensource.com* -Linux 目录结构有很多有趣的功能。这个月我涉及了 /dev 目录一些迷人之处。在继续阅读这篇文章之前,建议你看看我前面的文章。[Linux 文件系统][9],[一切皆为文件][8],这两篇文章介绍了一些有趣的 Linux 文件系统概念。请先看看 - 我会等待。 +Linux 目录结构中有很多有趣的功能,这次我会讲到 `/dev` 目录一些迷人之处。在继续阅读这篇文章之前,建议你看看我前面的文章。[Linux 文件系统][9],[一切皆为文件][8],这两篇文章介绍了一些有趣的 Linux 文件系统概念。请先看看 - 我会等你看完再回来。 -太好了 !欢迎回来。现在我们可以继续更详尽地探讨 /dev 目录。 +…… + +太好了 !欢迎回来。现在我们可以继续更详尽地探讨 `/dev` 目录。 ### 设备文件 -设备文件也称为 [special files][4]。设备文件用来为操作系统和用户提供它们代表的设备接口。所有的 Linux 设备文件位于 /dev 目录,是根 (/) 文件系统的一个组成部分,因为这些设备文件在操作系统启动过程中必须用到。 +设备文件也称为[设备特定文件][4]。设备文件用来为操作系统和用户提供它们代表的设备接口。所有的 Linux 设备文件均位于 `/dev` 目录下,是根 (`/`) 文件系统的一个组成部分,因为这些设备文件在操作系统启动过程中必须可以使用。 -关于这些设备文件,要记住一件重要的事情,就是它们大多不是设备驱动。更准确地描述来说,它们是对设备驱动程序的门户。数据从应用程序或操作系统传递到设备文件,然后设备文件将它传递给设备驱动程序,驱动再将它发给物理设备。反向数据通道也可以用,从物理设备通过设备驱动程序,再到设备文件,最后到达一个应用程序或其他设备。 +关于这些设备文件,要记住的一件重要的事情,就是它们大多不是设备驱动程序。更准确地描述来说,它们是设备驱动程序的门户。数据从应用程序或操作系统传递到设备文件,然后设备文件将它传递给设备驱动程序,驱动程序再将它发给物理设备。反向的数据通道也可以用,从物理设备通过设备驱动程序,再到设备文件,最后到达应用程序或其他设备。 -让我们以一个可视化的典型命令看看这数据的流程。 +让我们以一个典型命令的数据流程来直观地看看。 ![dboth-dev-dir_0.png](https://opensource.com/sites/default/files/images/life-uploads/dboth-dev-dir_0.png) -*图 1:一个典型命令的简单数据流。* +*图 1:一个典型命令的简单数据流程。* -在图 1 中,显示一个简单命令的简化数据流程。从一个 GUI 终端仿真器,例如 Konsole 或 xterm 中发出 **cat /etc/resolv.conf** 命令,从磁盘中读取 resolv.conf 文件,磁盘设备驱动程序处理设备的具体功能,例如在硬盘驱动器上定位文件并读取它。数据通过设备文件传递,然后从命令到设备文件,然后到伪终端 6 的设备驱动,然后在终端会话中显示。 +在上面的图 1 中,显示一个简单命令的简化数据流程。从一个 GUI 终端仿真器,例如 Konsole 或 xterm 中发出 `cat /etc/resolv.conf` 命令,它会从磁盘中读取 `resolv.conf` 文件,磁盘设备驱动程序处理设备的具体功能,例如在硬盘驱动器上定位文件并读取它。数据通过设备文件传递,然后从命令到设备文件,然后到 6 号伪终端的设备驱动,然后在终端会话中显示。 -当然, **cat** 命令的输出可以下面的方式被重定向到一个文件, **cat /etc/resolv.conf > /etc/resolv.bak** ,以创建该文件的备份。在这种情况下,图 1 左侧的数据流量将保持不变,而右边的数据流量将通过 /dev/sda2 设备文件,硬盘设备驱动程序,然后到硬盘驱动器本身。 +当然, `cat` 命令的输出可以以下面的方式被重定向到一个文件, `cat /etc/resolv.conf > /etc/resolv.bak` ,这样会创建该文件的备份。在这种情况下,图 1 左侧的数据流量将保持不变,而右边的数据流量将通过 `/dev/sda2` 设备文件、硬盘设备驱动程序,然后到硬盘驱动器本身。 -这些设备文件使用标准流 (STD/IO) 和重定向,使得访问 Linux 或 Unix 计算机上的任何一个设备非常容易。只需将数据流定向到设备文件,即可将数据发送到该设备。 +这些设备文件使得使用标准流 (STD/IO) 和重定向访问 Linux 或 Unix 计算机上的任何一个设备非常容易。只需将数据流定向到设备文件,即可将数据发送到该设备。 ### 设备文件类别 -设备文件至少可以按两种方式划分。第一种也是最常用的分类是根据与设备相关联的数据流进行划分。比如,tty (teletype) 和串行设备被认为是基于字符的,因为一次传送和处理数据流的一个字符或字节。 块类型设备(如硬盘驱动器)以块为单位传输数据,通常为 256 个字节的倍数。 +设备文件至少可以按两种方式划分。第一种也是最常用的分类是根据与设备相关联的数据流进行划分。比如,tty (teletype) 和串行设备被认为是基于字符的,因为数据流的传送和处理是以一次一个字符或字节进行的;而块类型设备(如硬盘驱动器)是以块为单位传输数据,通常为 256 个字节的倍数。 -您可以在终端上以一个非 root 用户,改变当前工作目录(PWD)到 /dev ,并显示长目录列表。 这将显示设备文件列表、文件权限及其主次设备号。 例如,下面的设备文件只是我的 Fedora 24 工作站上 /dev 目录中的几个文件。 它们表示磁盘和 tty 设备类型。 注意输出中每行的最左边的字符。 “b” 代表是块类型设备,“c” 代表字符设备。 +您可以在终端上以一个非 root 用户,改变当前工作目录(`PWD`)到 `/dev` ,并显示长目录列表。 这将显示设备文件列表、文件权限及其主、次设备号。 例如,下面的设备文件只是我的 Fedora 24 工作站上 `/dev` 目录中的几个文件。 它们表示磁盘和 tty 设备类型。 注意输出中每行的最左边的字符。 `b` 代表是块类型设备,`c` 代表字符设备。 ``` brw-rw----   1 root disk        8,   0 Nov  7 07:06 sda @@ -46,65 +49,65 @@ crw--w---- 1 root tty         4,  10 Nov  7 07:06 tty10 crw--w---- 1 root tty         4,  11 Nov  7 07:06 tty11 ``` -识别设备文件更详细和更明确的方法是使用设备主要以及次要号。 磁盘设备主设备号为 8,将它们指定为 SCSI 块设备。 请注意,所有 PATA 和 SATA 硬盘驱动器都由 SCSI 子系统管理,因为旧的 ATA 子系统多年前被认为是不可维护的,因为它的代码质量差。 造成的结果是,以前被称为 “hd [a-z]” 的硬盘驱动器现在被称为 “sd [a-z]”。 +识别设备文件更详细和更明确的方法是使用设备主要以及次要号。 磁盘设备主设备号为 8,将它们指定为 SCSI 块设备。请注意,所有 PATA 和 SATA 硬盘驱动器都由 SCSI 子系统管理,因为旧的 ATA 子系统多年前就由于代码质量糟糕而被认为不可维护。造成的结果就是,以前被称为 “hd[a-z]” 的硬盘驱动器现在被称为 “sd[a-z]”。 -你大概可以从上面的示例中推出磁盘驱动器次设备号的样式。次设备号 0、 16、 32 等等,直到 240,是整磁盘号。所以主/次 8/16 表示整个磁盘 /dev/sdb , 8/17 是第一个分区的设备文件,/dev/sdb1。数字 8/34 代表 /dev/sdc2。 +你大概可以从上面的示例中推出磁盘驱动器次设备号的模式。次设备号 0、 16、 32 等等,直到 240,是整个磁盘的号。所以主/次 8/16 表示整个磁盘 `/dev/sdb` , 8/17 是第一个分区的设备文件,`/dev/sdb1`。数字 8/34 代表 `/dev/sdc2`。 在上面列表中的 tty 设备文件编号更简单一些,从 tty0 到 tty63 。 -Kernel.org 上的 [Linux Allocated Devices][5] 文件是设备类型和主次编号分配的正式注册表。 它可以帮助您了解所有当前定义的设备的主要/次要号码。 +Kernel.org 上的 [Linux 下的已分配设备][5]文件是设备类型和主次编号分配的正式注册表。它可以帮助您了解所有当前定义的设备的主要/次要号码。 ### 趣味设备文件 -让我们花几分钟时间,执行几个有趣的实验,演示 Linux 设备文件的强大和灵活性。 大多数 Linux 发行版都有 1 到 7 个虚拟控制台,可用于使用 shell 接口登录到本地控制台会话。 可以使用 Ctrl-Alt-F1(控制台1),Ctrl-Alt-F2(控制台2)等键盘组合键来访问。 +让我们花几分钟时间,执行几个有趣的实验,演示 Linux 设备文件的强大和灵活性。 大多数 Linux 发行版都有 1 到 7 个虚拟控制台,可用于使用 shell 接口登录到本地控制台会话。 可以使用 `Ctrl-Alt-F1`(控制台 1),`Ctrl-Alt-F2`(控制台 2)等键盘组合键来访问。 -请按 Ctrl-Alt-F2 切换到控制台 2。在某些发行版,登录信息包括与此控制台关联的 tty 设备,但大多不包括。它应该是 tty2,因为你是在控制台 2 中。 +请按 `Ctrl-Alt-F2` 切换到控制台 2。在某些发行版,登录显示的信息包括了与此控制台关联的 tty 设备,但大多不包括。它应该是 tty2,因为你是在控制台 2 中。 -以非 root 用户身份登录。 然后你可以使用 who am i 命令 — 是的,就是这个命令,带空格 — 来确定哪个 tty 设备连接到这个控制台。 +以非 root 用户身份登录。 然后你可以使用 `who am i` 命令 — 是的,就是这个命令,带空格 — 来确定哪个 tty 设备连接到这个控制台。 -在我们实际执行此实验之前,看看 /dev 中的 tty2 和 tty3 的设备列表。 +在我们实际执行此实验之前,看看 `/dev` 中的 tty2 和 tty3 的设备列表。 ``` ls -l /dev/tty[23] ``` -有大量的 tty 设备,但我们不关心他们中的大多数,只注意 tty2 和 tty3 设备。 作为设备文件,他们没什么特别之处。他们都只是字符类型设备。我们将使用这些设备进行此实验。 tty2 设备连接到虚拟控制台 2,tty3 设备连接到虚拟控制台 3。 +有大量的 tty 设备,但我们不关心他们中的大多数,只注意 tty2 和 tty3 设备。 作为设备文件,它们没什么特别之处。它们都只是字符类型设备。我们将使用这些设备进行此实验。 tty2 设备连接到虚拟控制台 2,tty3 设备连接到虚拟控制台 3。 -按 Ctrl-Alt-F3 切换到控制台 3。再次以同一非 root 用户身份登陆。 现在在控制台 3 上输入以下命令。 +按 `Ctrl-Alt-F3` 切换到控制台 3。再次以同一非 root 用户身份登录。 现在在控制台 3 上输入以下命令。 ``` echo "Hello world" > /dev/tty2 ``` -按 Ctrl-Alt-f2 键以返回到控制台 2。字符串 “Hello world”(没有引号)将显示在控制台 2。 +按 `Ctrl-Alt-f2` 键以返回到控制台 2。字符串 “Hello world”(没有引号)将显示在控制台 2。 -该实验也可以使用 GUI 桌面上的终端仿真器来执行。 桌面上的终端会话使用 /dev 中的伪终端设备,如 /dev/pts/1。 使用 Konsole 或 Xterm 打开两个终端会话。 确定它们连接到哪些伪终端,并使用一个向另一个发送消息。 +该实验也可以使用 GUI 桌面上的终端仿真器来执行。 桌面上的终端会话使用 `/dev` 中的伪终端设备,如 `/dev/pts/1`。 使用 Konsole 或 Xterm 打开两个终端会话。 确定它们连接到哪些伪终端,并使用一个向另一个发送消息。 -现在继续实验,使用 cat 命令,在不同的终端上显示 /etc/fstab 文件。 +现在继续实验,使用 `cat` 命令,试试在不同的终端上显示 `/etc/fstab` 文件。 -另一个有趣的实验是使用 cat 命令将文件直接打印到打印机。 假设您的打印机设备是 /dev/usb/lp0,并且您的打印机可以直接打印 PDF 文件,以下命令将在您的打印机上打印 test.pdf 文件。 +另一个有趣的实验是使用 `cat` 命令将文件直接打印到打印机。 假设您的打印机设备是 `/dev/usb/lp0`,并且您的打印机可以直接打印 PDF 文件,以下命令将在您的打印机上打印 `test.pdf` 文件。 ``` cat test.pdf > /dev/usb/lp0 ``` -/dev 目录包含一些非常有趣的设备文件,这些文件是硬件的入口,人们通常不认为这是硬盘驱动器或显示器之类的设备。 例如,系统存储器 RAM 不是通常被认为是“设备”的东西,而 /dev/mem 是通过其可以实现对存储器的直接访问的入口。 下面的例子有一些有趣的结果。 +`/dev` 目录包含一些非常有趣的设备文件,这些文件是硬件的入口,人们通常不认为这是硬盘驱动器或显示器之类的设备。 例如,系统存储器 RAM 不是通常被认为是“设备”的东西,而 `/dev/mem` 是通过其可以实现对存储器的直接访问的入口。 下面的例子有一些有趣的结果。 ``` dd if=/dev/mem bs=2048 count=100 ``` -上面的 **dd** 命令提供比简单地使用 **cat** 命令 dump 所有系统的内存提供了更多的控制。 它提供了指定从 /dev/mem 读取多少数据的能力,还允许指定从存储器哪里开始读取数据。 虽然读取了一些内存,但内核响应了以下错误,在 /var/log/messages 中可以找到。 +上面的 `dd` 命令提供比简单地使用 `cat` 命令 dump 所有系统的内存提供了更多的控制。 它提供了指定从 `/dev/mem` 读取多少数据的能力,还允许指定从存储器哪里开始读取数据。虽然读取了一些内存,但内核响应了以下错误,在 `/var/log/messages` 中可以看到。 ``` Nov 14 14:37:31 david kernel: usercopy: kernel memory exposure attempt detected from ffff9f78c0010000 (dma-kmalloc-512) (2048 bytes) ``` -这个错误意味着内核正在通过保护属于其他进程的内存来完成它的工作,这正是它应该工作的方式。 所以,虽然可以使用 /dev/mem 来显示存储在 RAM 内存中的数据,但是访问大多数内存空间是受保护的并且会导致错误。 只可以访问由内核内存管理器分配给运行 **dd** 命令的 BASH shell 的虚拟内存,而不会导致错误。 抱歉,但你不能窥视不属于你的内存,除非你发现了一个可利用的漏洞。 +这个错误意味着内核正在通过保护属于其他进程的内存来完成它的工作,这正是它应该工作的方式。 所以,虽然可以使用 `/dev/mem` 来显示存储在 RAM 内存中的数据,但是访问的大多数内存空间是受保护的并且会导致错误。 只可以访问由内核内存管理器分配给运行 `dd` 命令的 BASH shell 的虚拟内存,而不会导致错误。 抱歉,但你不能窥视不属于你的内存,除非你发现了一个可利用的漏洞。 -/dev 中还有一些非常有趣的设备文件。 设备文件 null,zero,random 和 urandom 不与任何物理设备相关联。 +`/dev` 中还有一些非常有趣的设备文件。 设备文件 `null`,`zero`,`random` 和 `urandom` 不与任何物理设备相关联。 -例如,空设备 /dev/null 可以用作来自 shell 命令或程序的输出重定向的目标,以便它们不显示在终端上。 我经常在我的 BASH 脚本中使用这个,以防止向用户展示可能会让他们感到困惑的输出。 /dev/null 设备可用于产生一个空字符串。 使用如下所示的 dd 命令查看 /dev/null 设备文件的一些输出。 +例如,空设备 `/dev/null` 可以用作来自 shell 命令或程序的输出重定向的目标,以便它们不显示在终端上。 我经常在我的 BASH 脚本中使用这个,以防止向用户展示可能会让他们感到困惑的输出。 `/dev/null` 设备可用于产生一个空字符串。 使用如下所示的 `dd` 命令查看 `/dev/null` 设备文件的一些输出。 ``` # dd if=/dev/null bs=512 count=500 | od -c @@ -114,13 +117,13 @@ Nov 14 14:37:31 david kernel: usercopy: kernel memory exposure attempt detected 0000000 ``` -注意,因为空字符什么也没有所以确实没有可见的输出。 注意字节数。 +注意,因为空字符什么也没有所以确实没有可见的输出。 注意看看字节数。 -/dev/random 和 /dev/urandom 设备也很有趣。 正如他们的名字所暗示的,它们都产生随机输出,而不仅仅是数字,而是任何字节组合。 /dev/urandom 设备产生确定性的随机输出并且非常快。 这意味着输出由算法确定,并使用种子字符串作为起点。 结果,如果原始种子是已知的,则黑客可以再现输出,尽管非常困难,但这是有可能的。 使用命令 **cat /dev/urandom** 可以查看典型输出,使用 Ctrl-c 退出。 +`/dev/random` 和 `/dev/urandom` 设备也很有趣。 正如它们的名字所暗示的,它们都产生随机输出,不仅仅是数字,而是任何字节组合。 `/dev/urandom` 设备产生的是**确定性**的随机输出,并且非常快。 这意味着输出由算法确定,并使用种子字符串作为起点。 结果,如果原始种子是已知的,则黑客可以再现输出,尽管非常困难,但这是有可能的。 使用命令 `cat /dev/urandom` 可以查看典型的输出,使用 `Ctrl-c` 退出。 -/dev/random 设备文件生成非确定性随机输出,但它产生的输出更慢。 该输出不是由依赖于先前数字的算法确定的,而是由击键和鼠标移动而产生的。 这种方法使得复制特定系列的随机数要困难得多。使用 **cat **命令去查看一些来自 /dev/random 设备文件输出。尝试移动鼠标以查看它如何影响输出。 +`/dev/random` 设备文件生成**非确定性**的随机输出,但它产生的输出更慢一些。 该输出不是由依赖于先前数字的算法确定的,而是由击键动作和鼠标移动而产生的。 这种方法使得复制特定系列的随机数要困难得多。使用 `cat` 命令去查看一些来自 `/dev/random` 设备文件输出。尝试移动鼠标以查看它如何影响输出。 -正如其名字所暗示的,/dev/zero 设备文件产生一个无止境的零作为输出。 注意,这些是八进制零,而不是ASCII字符零(0)。 使用如下所示的 **dd** 查看 /dev/zero 设备文件中的一些输出 +正如其名字所暗示的,`/dev/zero` 设备文件产生一个无止境的零作为输出。 注意,这些是八进制零,而不是ASCII字符零(`0`)。 使用如下所示的 `dd` 查看 `/dev/zero` 设备文件中的一些输出 ``` # dd if=/dev/zero bs=512 count=500 | od -c @@ -136,29 +139,27 @@ Nov 14 14:37:31 david kernel: usercopy: kernel memory exposure attempt detected ### 创建设备文件 -在过去,在 /dev 中的设备文件都是在安装时创建的,导致一个目录中有几乎所有的设备文件,尽管大多数文件永远不会用到。 在不常发生的情况,例如需要新的设备文件,或意外删除后需要重新创建设备文件,可以使用 **mknod** 程序手动创建设备文件。 前提是你必须知道设备主要和次要号码。 +在过去,在 `/dev` 中的设备文件都是在安装时创建的,导致一个目录中有几乎所有的设备文件,尽管大多数文件永远不会用到。 在不常发生的情况,例如需要新的设备文件,或意外删除后需要重新创建设备文件,可以使用 `mknod` 程序手动创建设备文件。 前提是你必须知道设备的主要和次要号码。 +CentOS 和 RHEL 6、7,以及 Fedora 的所有版本——可以追溯到至少 Fedora 15,使用较新的创建设备文件的方法。 所有设备文件都是在引导时创建的。 这是因为 udev 设备管理器在设备添加和删除发生时会进行检测。这可实现在主机启动和运行时的真正的动态即插即用功能。 它还在引导时执行相同的任务,通过在引导过程的很早的时期检测系统上安装的所有设备。 [Linux.com][6] 上有一篇很棒的对 [udev 的描述][7]。 -CentOS 和 RHEL 6、7, 以及 Fedora 的所有版本,追溯到至少 Fedora 15,使用较新的创建设备文件的方法。 所有设备文件都是在引导时创建的。 这是因为 udev 设备管理器在设备添加和删除发生时会进行检测。这可实现在主机启动和运行时的真正的动态即插即用功能。 它还在引导时执行相同的任务,通过在引导过程的早期检测系统上安装的所有设备。 [Linux.com][6] 上有很棒的对 [udev 的描述][7]. +回到 `/dev` 中的文件列表,注意文件的日期和时间。 所有文件都是在上次启动时创建的。 您可以使用 `uptime` 或者 `last` 命令来验证这一点。在上面我的设备列表中,所有这些文件都是在 11 月 7 日上午 7:06 创建的,这是我最后一次启动系统。 -回到 /dev 中的文件列表,注意文件的日期和时间。 所有文件都是在上次启动时创建的。 您可以使用 **uptime** 或者 **last** 命令来验证这一点。在上面我的设备列表中,所有这些文件都是在 11 月 7 日上午 7:06 创建的,这是我最后一次启动系统。 - -当然,  **mknod** 命令仍然可用, 但新的 **MAKEDEV** (是的,所有字母大写,在我看来是违背 Linux 使用小写命令名的原则的) 命令提供了一个更容易的界面,用于创建设备文件,如果需要的话。 在当前版本的 Fedora 或 CentOS 7 中,默认情况下不安装 MAKEDEV 命令; 它安装在 CentOS 6。您可以使用 YUM 或 DNF 来安装 MAKEDEV 包。 +当然, `mknod` 命令仍然可用, 但新的 `MAKEDEV` (是的,所有字母大写,在我看来是违背 Linux 使用小写命令名的原则的) 命令提供了一个创建设备文件的更容易的界面。 在当前版本的 Fedora 或 CentOS 7 中,默认情况下不安装 `MAKEDEV` 命令;它安装在 CentOS 6。您可以使用 YUM 或 DNF 来安装 MAKEDEV 包。 ### 结论 -有趣的是,我需要创建一个设备文件已经很长时间了。 然而,最近我遇到一个有趣的情况,其中一个我常使用的设备文件没有创建,我不得不创建它。 之后该设备再出过问题。所以丢失设备文件的情况仍然可以发生,知道如何处理它可能很重要。 - +有趣的是,我很久没有创建一个设备文件的需要了。 然而,最近我遇到一个有趣的情况,其中一个我常使用的设备文件没有创建,我不得不创建它。 之后该设备再没出过问题。所以丢失设备文件的情况仍然可以发生,知道如何处理它可能很重要。 设备文件有无数种,您遇到的设备文件我可能没有涵盖到。 这些信息在所下面引用的资源中有大量的细节信息可用。 关于这些文件的功能和工具,我希望我已经给您一些基本的了解,下一步您自己可以探索更多。 资源 -- [Everything is a file][1], David Both, Opensource.com -- [An introduction to Linux filesystems][2], David Both, Opensource.com -- [Filesystem Hierarchy][10], The Linux Documentation Project -- [Device File][4], Wikipedia -- [Linux Allocated Devices][5], Kernel.org +- [一切皆文件][1], David Both, Opensource.com +- [Linux 文件系统介绍][2], David Both, Opensource.com +- [文件系统层次结构][10], The Linux Documentation Project +- [设备文件][4], Wikipedia +- [Linux 下已分配设备][5], Kernel.org -------------------------------------------------------------------------------- From 04418341a00af8b5d02d47c0842cc22c80dc90f8 Mon Sep 17 00:00:00 2001 From: wxy Date: Sat, 7 Jan 2017 11:06:41 +0800 Subject: [PATCH 04/22] PUB:20161128 Managing devices in Linux @erlinux --- .../tech => published}/20161128 Managing devices in Linux.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {translated/tech => published}/20161128 Managing devices in Linux.md (100%) diff --git a/translated/tech/20161128 Managing devices in Linux.md b/published/20161128 Managing devices in Linux.md similarity index 100% rename from translated/tech/20161128 Managing devices in Linux.md rename to published/20161128 Managing devices in Linux.md From fa3cb503164a3708dd3cba7d7116ef82caa57740 Mon Sep 17 00:00:00 2001 From: Ezio Date: Sat, 7 Jan 2017 15:31:23 +0800 Subject: [PATCH 05/22] =?UTF-8?q?20170107-1=20=E9=80=89=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... for Effective File Operations in Linux.md | 378 ++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 sources/tech/20170106 12 Useful Commands For Filtering Text for Effective File Operations in Linux.md diff --git a/sources/tech/20170106 12 Useful Commands For Filtering Text for Effective File Operations in Linux.md b/sources/tech/20170106 12 Useful Commands For Filtering Text for Effective File Operations in Linux.md new file mode 100644 index 0000000000..f0d30f7f44 --- /dev/null +++ b/sources/tech/20170106 12 Useful Commands For Filtering Text for Effective File Operations in Linux.md @@ -0,0 +1,378 @@ +12 Useful Commands For Filtering Text for Effective File Operations in Linux +============================================================ + +In this article, we will review a number of command line tools that act as filters in Linux. A filter is a program that reads standard input, performs an operation upon it and writes the results to standard output. + +For this reason, it can be used to process information in powerful ways such as restructuring output to generate useful reports, modifying text in files and many other system administration tasks. + +With that said, below are some of the useful file or text filters in Linux. + +### 1\. Awk Command + +Awk is a remarkable pattern scanning and processing language, it can be used to build useful filters in Linux. You can start using it by reading through our [Awk series Part 1 to Part 13][7]. + +Additionally, also read through the awk man page for more info and usage options: + +``` +$ man awk +``` + +### 2\. Sed Command + +sed is a powerful stream editor for filtering and transforming text. We’ve already written a two useful articles on sed, that you can go through it here: + +1. [How to use GNU ‘sed’ Command to Create, Edit, and Manipulate files in Linux][1] +2. [15 Useful ‘sed’ Command Tips and Tricks for Daily Linux System Administration Tasks][2] + +The sed man page has added control options and instructions: + +``` +$ man sed +``` + +### 3\. Grep, Egrep, Fgrep, Rgrep Commands + +These filters output lines matching a given pattern. They read lines from a file or standard input, and print all matching lines by default to standard output. + +Note: The main program is [grep][8], the variations are simply the same as [using specific grep options][9] as below (and they are still being used for backward compatibility): + +``` +$ egrep = grep -E +$ fgrep = grep -F +$ rgrep = grep -r +``` + +Below are some basic grep commands: + +``` +tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd +aaronkilik:x:1001:1001::/home/aaronkilik: +tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik" +aaronkilik:x:1001:1001::/home/aaronkilik: +``` + +You can read more about [What’s Difference Between Grep, Egrep and Fgrep in Linux?][10]. + +### 4\. head Command + +head is used to display the first parts of a file, it outputs the first 10 lines by default. You can use the `-n` num flag to specify the number of lines to be displayed: + +``` +tecmint@TecMint ~ $ head /var/log/auth.log +Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0) +Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root +Jan 2 10:51:34 TecMint sudo: tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py +Jan 2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0) +Jan 2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root +Jan 2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0) +Jan 2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root +Jan 2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0) +Jan 2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root +Jan 2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0) +tecmint@TecMint ~ $ head -n 5 /var/log/auth.log +Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0) +Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root +Jan 2 10:51:34 TecMint sudo: tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py +Jan 2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0) +Jan 2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root +``` + +Learn how to use [head command with tail and cat commands][11] for effective usage in Linux. + +### 5\. tail Command + +tail outputs the last parts (10 lines by default) of a file. Use the `-n` num switch to specify the number of lines to be displayed. + +The command below will output the last 5 lines of the specified file: + +``` +tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log +Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22. +Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22. +Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting. +Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22. +Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22. +``` + +Additionally, tail has a special option `-f` for [watching changes in a file in real-time][12] (especially log files). + +The following command will enable you monitor changes in the specified file: + +``` +tecmint@TecMint ~ $ tail -f /var/log/auth.log +Jan 6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22. +Jan 6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting. +Jan 6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22. +Jan 6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22. +Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting. +Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22. +Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22. +Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting. +Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22. +Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22. +``` + +Read through the tail man page for a complete list of usage options and instructions: + +``` +$ man tail +``` + +### 6\. sort Command + +sort is used to sort lines of a text file or from standard input. + +Below is the content of a file named domains.list: + +``` +tecmint@TecMint ~ $ cat domains.list +tecmint.com +tecmint.com +news.tecmint.com +news.tecmint.com +linuxsay.com +linuxsay.com +windowsmint.com +windowsmint.com +``` + +You can run a simple [sort command][13] to sort the file content like so: + +``` +tecmint@TecMint ~ $ sort domains.list +linuxsay.com +linuxsay.com +news.tecmint.com +news.tecmint.com +tecmint.com +tecmint.com +windowsmint.com +windowsmint.com +``` + +You can use sort command in many ways, go through some of the useful articles on sort command as follows: + +1. [14 Useful Examples of Linux ‘sort’ Command – Part 1][3] +2. [7 Interesting Linux ‘sort’ Command Examples – Part 2][4] +3. [How to Find and Sort Files Based on Modification Date and Time][5] +4. [http://www.tecmint.com/sort-ls-output-by-last-modified-date-and-time/][6] + +### 7\. uniq Command + +uniq command is used to report or omit repeated lines, it filters lines from standard input and writes the outcome to standard output. + +After running sort on an input stream, you can remove repeated lines with uniq as in the example below. + +To indicate the number of occurrences of a line, use the `-c` option and ignore differences in case while comparing by including the `-i` option: + +``` +tecmint@TecMint ~ $ cat domains.list +tecmint.com +tecmint.com +news.tecmint.com +news.tecmint.com +linuxsay.com +linuxsay.com +windowsmint.com +tecmint@TecMint ~ $ sort domains.list | uniq -c +2 linuxsay.com +2 news.tecmint.com +2 tecmint.com +1 windowsmint.com +``` + +Read through the uniq man page for further usage info and flags: + +``` +$ man uniq +``` + +### 8\. fmt Command + +fmt simple optimal text formatter, it reformats paragraphs in specified file and prints results to the standard output. + +The following is the content extracted from the file domain-list.txt: + +``` +1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com +``` + +To reformat the above content to a standard list, run the following command with `-w` switch is used to define the maximum line width: + +``` +tecmint@TecMint ~ $ cat domain-list.txt +1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com +tecmint@TecMint ~ $ fmt -w 1 domain-list.txt +1.tecmint.com +2.news.tecmint.com +3.linuxsay.com +4.windowsmint.com +``` + +### 9\. pr Command + +pr command converts text files or standard input for printing. For instance on Debian systems, you can list all installed packages as follows: + +``` +$ dpkg -l +``` + +To organize the list in pages and columns ready for printing, issue the following command. + +``` +tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20 +2017-01-06 13:19 Page 1 +Desired=Unknown/Install ii adduser ii apg +| Status=Not/Inst/Conf- ii adwaita-icon-theme ii app-install-data +|/ Err?=(none)/Reinst-r ii adwaita-icon-theme- ii apparmor +||/ Name ii alsa-base ii apt ++++-=================== ii alsa-utils ii apt-clone +ii accountsservice ii anacron ii apt-transport-https +ii acl ii apache2 ii apt-utils +ii acpi-support ii apache2-bin ii apt-xapian-index +ii acpid ii apache2-data ii aptdaemon +ii add-apt-key ii apache2-utils ii aptdaemon-data +2017-01-06 13:19 Page 2 +ii aptitude ii avahi-daemon ii bind9-host +ii aptitude-common ii avahi-utils ii binfmt-support +ii apturl ii aview ii binutils +ii apturl-common ii banshee ii bison +ii archdetect-deb ii baobab ii blt +ii aspell ii base-files ii blueberry +ii aspell-en ii base-passwd ii bluetooth +ii at-spi2-core ii bash ii bluez +ii attr ii bash-completion ii bluez-cups +ii avahi-autoipd ii bc ii bluez-obexd +..... +``` + +The flags used here are: + +1. `--column` defines number of columns created in the output. +2. `-l` specifies page length (default is 66 lines). + +### 10\. tr Command + +This tool translates or deletes characters from standard input and writes results to standard output. + +The syntax for using tr is as follows: + +``` +$ tr options set1 set2 +``` + +Take a look at the examples below, in the first command, `set1( [:upper:] )` represents the case of input characters (all upper case). + +Then `set2([:lower:])` represents the case in which the resultant characters will be. It’s same thing in the second example and the escape sequence `\n` means print output on a new line: + +``` +tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:] +www.tecmint.com +tecmint@TecMint ~ $ echo "news.tecmint.com" | tr [:lower:] [:upper:] +NEWS.TECMINT.COM +``` + +### 11\. more Command + +more command is a useful file perusal filter created basically for certificate viewing. It shows file content in a page like format, where users can press [Enter] to view more information. + +You can use it to view large files like so: + +``` +tecmint@TecMint ~ $ dmesg | more +[ 0.000000] Initializing cgroup subsys cpuset +[ 0.000000] Initializing cgroup subsys cpu +[ 0.000000] Initializing cgroup subsys cpuacct +[ 0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic +4.4.6) +[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7 +[ 0.000000] KERNEL supported cpus: +[ 0.000000] Intel GenuineIntel +[ 0.000000] AMD AuthenticAMD +[ 0.000000] Centaur CentaurHauls +[ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 +[ 0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers' +[ 0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers' +[ 0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers' +[ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format. +[ 0.000000] x86/fpu: Using 'eager' FPU context switches. +[ 0.000000] e820: BIOS-provided physical RAM map: +[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable +[ 0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved +[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved +[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable +[ 0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved +[ 0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable +--More-- +``` + +### 12\. less Command + +less is the opposite of more command above but it offers extra features and it’s a little faster with large files. + +Use it in the same way as more: + +``` +tecmint@TecMint ~ $ dmesg | less +[ 0.000000] Initializing cgroup subsys cpuset +[ 0.000000] Initializing cgroup subsys cpu +[ 0.000000] Initializing cgroup subsys cpuacct +[ 0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic +4.4.6) +[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7 +[ 0.000000] KERNEL supported cpus: +[ 0.000000] Intel GenuineIntel +[ 0.000000] AMD AuthenticAMD +[ 0.000000] Centaur CentaurHauls +[ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 +[ 0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers' +[ 0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers' +[ 0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers' +[ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format. +[ 0.000000] x86/fpu: Using 'eager' FPU context switches. +[ 0.000000] e820: BIOS-provided physical RAM map: +[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable +[ 0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved +[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved +[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable +[ 0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved +[ 0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable +: +``` + +Learn Why [‘less’ is Faster Than ‘more’ Command][14] for effective file navigation in Linux. + +That’s all for now, do let us know of any [useful command line tools][15] not mentioned here, that act as a text filters in Linux via the comment section below. + +-------------------------------------------------------------------------------- + +作者简介:Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge. + +![](http://1.gravatar.com/avatar/4e444ab611c7b8c7bcb76e58d2e82ae0?s=128&d=blank&r=g) + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/linux-file-operations-commands/ + +作者:[Aaron Kili][a] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/aaronkili/ +[1]:http://www.tecmint.com/sed-command-to-create-edit-and-manipulate-files-in-linux/ +[2]:http://www.tecmint.com/linux-sed-command-tips-tricks/ +[3]:http://www.tecmint.com/sort-command-linux/ +[4]:http://www.tecmint.com/linux-sort-command-examples/ +[5]:http://www.tecmint.com/find-and-sort-files-modification-date-and-time-in-linux/ +[6]:http://how%20to%20sort%20output%20of%20%E2%80%98ls%E2%80%99%20command%20by%20last%20modified%20date%20and%20time/ +[7]:http://www.tecmint.com/category/awk-command/ +[8]:http://www.tecmint.com/12-practical-examples-of-linux-grep-command/ +[9]:http://www.tecmint.com/linux-grep-commands-character-classes-bracket-expressions/ +[10]:http://www.tecmint.com/difference-between-grep-egrep-and-fgrep-in-linux/ +[11]:http://www.tecmint.com/view-contents-of-file-in-linux/ +[12]:http://www.tecmint.com/fswatch-monitors-files-and-directory-changes-modifications-in-linux/ +[13]:http://www.tecmint.com/sort-command-linux/ +[14]:http://www.tecmint.com/linux-more-command-and-less-command-examples/ +[15]:http://www.tecmint.com/tag/linux-tricks/ From b66a4b82da43f400bf5e665eafe4e09a1f6c55a2 Mon Sep 17 00:00:00 2001 From: Ezio Date: Sat, 7 Jan 2017 15:34:21 +0800 Subject: [PATCH 06/22] =?UTF-8?q?20170107-2=20=E9=80=89=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...onfigurations for Setting sudo in Linux.md | 248 ++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 sources/tech/20170107 10 Useful Sudoers Configurations for Setting sudo in Linux.md diff --git a/sources/tech/20170107 10 Useful Sudoers Configurations for Setting sudo in Linux.md b/sources/tech/20170107 10 Useful Sudoers Configurations for Setting sudo in Linux.md new file mode 100644 index 0000000000..993cd49138 --- /dev/null +++ b/sources/tech/20170107 10 Useful Sudoers Configurations for Setting sudo in Linux.md @@ -0,0 +1,248 @@ +10 Useful Sudoers Configurations for Setting ‘sudo’ in Linux +============================================================ + +In Linux and other Unix-like operating systems, only the root user can run all commands and perform certain critical operations on the system such as install and update, remove packages, [create users and groups][1], modify important system configuration files and so on. + +However, a system administrator who assumes the role of the root user can permit other normal system users with the help of [sudo command][2] and a few configurations to run some commands as well as carry out a number of vital system operations including the ones mentioned above. + +Alternatively, the system administrator can share the root user password (which is not a recommended method) so that normal system users have access to the root user account via su command. + +sudo allows a permitted user to execute a command as root (or another user), as specified by the security policy: + +1. It reads and parses /etc/sudoers, looks up the invoking user and its permissions, +2. then prompts the invoking user for a password (normally the user’s password, but it can as well be the target user’s password. Or it can be skipped with NOPASSWD tag), +3. after that, sudo creates a child process in which it calls setuid() to switch to the target user +4. next, it executes a shell or the command given as arguments in the child process above. + +Below are ten /etc/sudoers file configurations to modify the behavior of sudo command using Defaults entries. + +``` +$ sudo cat /etc/sudoers +``` +/etc/sudoers File +``` +# +# This file MUST be edited with the 'visudo' command as root. +# +# Please consider adding local content in /etc/sudoers.d/ instead of +# directly modifying this file. +# +# See the man page for details on how to write a sudoers file. +# +Defaults env_reset +Defaults mail_badpass +Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +Defaults logfile="/var/log/sudo.log" +Defaults lecture="always" +Defaults badpass_message="Password is wrong, please try again" +Defaults passwd_tries=5 +Defaults insults +Defaults log_input,log_output +``` + +#### Types of Defaults Entries + +``` +Defaults parameter, parameter_list #affect all users on any host +Defaults@Host_List parameter, parameter_list #affects all users on a specific host +Defaults:User_List parameter, parameter_list #affects a specific user +Defaults!Cmnd_List parameter, parameter_list #affects a specific command +Defaults>Runas_List parameter, parameter_list #affects commands being run as a specific user +``` + +For the scope of this guide, we will zero down to the first type of Defaults in the forms below. Parameters may be flags, integer values, strings, or lists. + +You should note that flags are implicitly boolean and can be turned off using the `'!'` operator, and lists have two additional assignment operators, `+=` (add to list) and `-=` (remove from list). + +``` +Defaults parameter +OR +Defaults parameter=value +OR +Defaults parameter -=value +Defaults parameter +=value +OR +Defaults !parameter +``` + +### 1\. Set a Secure PATH + +This is the path used for every command run with sudo, it has two importances: + +1. Used when a system administrator does not trust sudo users to have a secure PATH environment variable +2. To separate “root path” and “user path”, only users defined by exempt_group are not affected by this setting. + +To set it, add the line: + +``` +Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" +``` + +### 2\. Enable sudo on TTY User Login Session + +To enable sudo to be invoked from a real tty but not through methods such as cron or cgi-bin scripts, add the line: + +``` +Defaults requiretty +``` + +### 3\. Run Sudo Command Using a pty + +A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing. + +To avoid such a scenario, you can configure sudo to run other commands only from a psuedo-pty using the `use_pty` parameter, whether I/O logging is turned on or not as follows: + +``` +Defaults use_pty +``` + +### 4\. Create a Sudo Log File + +By default, sudo logs through syslog(3). However, to specify a custom log file, use the logfile parameter like so: + +``` +Defaults logfile="/var/log/sudo.log" +``` + +To log hostname and the four-digit year in the custom log file, use log_host and log_year parameters respectively as follows: + +``` +Defaults log_host, log_year, logfile="/var/log/sudo.log" +``` + +Below is an example of a custom sudo log file: + +[ + ![Create Custom Sudo Log File](http://www.tecmint.com/wp-content/uploads/2017/01/Create-Sudo-Log-File.png) +][3] + +Create Custom Sudo Log File + +### 5\. Log Sudo Command Input/Output + +The log_input and log_output parameters enable sudo to run a command in pseudo-tty and log all user input and all output sent to the screen receptively. + +The default I/O log directory is /var/log/sudo-io, and if there is a session sequence number, it is stored in this directory. You can specify a custom directory through the iolog_dir parameter. + +``` +Defaults log_input, log_output +``` + +There are some escape sequences are supported such as `%{seq}` which expands to a monotonically increasing base-36 sequence number, such as 000001, where every two digits are used to form a new directory, e.g. 00/00/01 as in the example below: + +``` +$ cd /var/log/sudo-io/ +$ ls +$ cd 00/00/01 +$ ls +$ cat log +``` +[ + ![Log sudo Input Output](http://www.tecmint.com/wp-content/uploads/2017/01/Log-sudo-Input-Output.png) +][4] + +Log sudo Input Output + +You can view the rest of the files in that directory using the [cat command][5]. + +### 6\. Lecture Sudo Users + +To lecture sudo users about password usage on the system, use the lecture parameter as below. + +It has 3 possible values: + +1. always – always lecture a user. +2. once – only lecture a user the first time they execute sudo command (this is used when no value is specified) +3. never – never lecture the user. + +``` + +Defaults lecture="always" +``` + +Additionally, you can set a custom lecture file with the lecture_file parameter, type the appropriate message in the file: + +``` +Defaults lecture_file="/path/to/file" +``` +[ + ![Lecture Sudo Users](http://www.tecmint.com/wp-content/uploads/2017/01/Lecture-Sudo-Users.png) +][6] + +Lecture Sudo Users + +### 7\. Show Custom Message When You Enter Wrong sudo Password + +When a user enters a wrong password, a certain message is displayed on the command line. The default message is “sorry, try again”, you can modify the message using the badpass_message parameter as follows: + +``` +Defaults badpass_message="Password is wrong, please try again" +``` + +### 8\. Increase sudo Password Tries Limit + +The parameter passwd_tries is used to specify the number of times a user can try to enter a password. + +The default value is 3: + +``` +Defaults passwd_tries=5 +``` +[ + ![Increase Sudo Password Attempts](http://www.tecmint.com/wp-content/uploads/2017/01/Increase-Sudo-Password-Attempts.png) +][7] + +Increase Sudo Password Attempts + +To set a password timeout (default is 5 minutes) using passwd_timeout parameter, add the line below: + +``` +Defaults passwd_timeout=2 +``` + +### 9\. Let Sudo Insult You When You Enter Wrong Password + +In case a user types a wrong password, sudo will display insults on the terminal with the insults parameter. This will automatically turn off the badpass_message parameter. + +``` +Defaults insults +``` +[ + ![Let's Sudo Insult You When Enter Wrong Password](http://www.tecmint.com/wp-content/uploads/2017/01/Sudo-Insult-Message.png) +][8] + +Let’s Sudo Insult You When Enter Wrong Password + +### 10\. Learn More Sudo Configurations + +Additionally, you can learn more sudo command configurations by reading: [Difference Between su and sudo and How to Configure sudo in Linux][9]. + +That’s it! You can share other useful sudo command configurations or [tricks and tips with Linux][10] users out there via the comment section below. + +-------------------------------------------------------------------------------- + +作者简介:Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge. + +![](http://1.gravatar.com/avatar/4e444ab611c7b8c7bcb76e58d2e82ae0?s=128&d=blank&r=g) + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/ + +作者:[Aaron Kili][a] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/aaronkili/ +[1]:http://www.tecmint.com/add-users-in-linux/ +[2]:http://www.tecmint.com/su-vs-sudo-and-how-to-configure-sudo-in-linux/ +[3]:http://www.tecmint.com/wp-content/uploads/2017/01/Create-Sudo-Log-File.png +[4]:http://www.tecmint.com/wp-content/uploads/2017/01/Log-sudo-Input-Output.png +[5]:http://www.tecmint.com/13-basic-cat-command-examples-in-linux/ +[6]:http://www.tecmint.com/wp-content/uploads/2017/01/Lecture-Sudo-Users.png +[7]:http://www.tecmint.com/wp-content/uploads/2017/01/Increase-Sudo-Password-Attempts.png +[8]:http://www.tecmint.com/wp-content/uploads/2017/01/Sudo-Insult-Message.png +[9]:http://www.tecmint.com/su-vs-sudo-and-how-to-configure-sudo-in-linux/ +[10]:http://www.tecmint.com/tag/linux-tricks/ From 80a7a3c8e5356aacc874122fba7dad4f262a496e Mon Sep 17 00:00:00 2001 From: Ezio Date: Sat, 7 Jan 2017 15:36:17 +0800 Subject: [PATCH 07/22] =?UTF-8?q?20170107-3=20=E9=80=89=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rs and Content in Linux Terminal Prompt.md | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 sources/tech/20170103 How to Customize Bash Colors and Content in Linux Terminal Prompt.md diff --git a/sources/tech/20170103 How to Customize Bash Colors and Content in Linux Terminal Prompt.md b/sources/tech/20170103 How to Customize Bash Colors and Content in Linux Terminal Prompt.md new file mode 100644 index 0000000000..81f36a2249 --- /dev/null +++ b/sources/tech/20170103 How to Customize Bash Colors and Content in Linux Terminal Prompt.md @@ -0,0 +1,114 @@ +How to Customize Bash Colors and Content in Linux Terminal Prompt +============================================================ + +Today, Bash is the default shell in most (if not all) modern Linux distributions. However, you may have noticed that the text color in the terminal and the prompt content can be different from one distro to another. + +In case you have been wondering how to customize this for better accessibility or mere whim, keep reading – in this article we will explain how to do just that. + +### The PS1 Bash Environment Variable + +The command prompt and terminal appearance are governed by an environment variable called `PS1`. According to the Bash man page, PS1 represents the primary prompt string which is displayed when the shell is ready to read a command. + +The allowed content in PS1 consists of several backslash-escaped special characters whose meaning is listed in the PROMPTING section of the man page. + +To illustrate, let’s display the current content of `PS1` in our system (this may be somewhat different in your case): + +``` +$ echo $PS1 +[\u@\h \W]\$ +``` + +We will now explain how to customize PS1 as per our needs. + +#### Customizing the PS1 Format + +According to the PROMPTING section in the man page, this is the meaning of each special character: + +1. `\u:` the username of the current user. +2. `\h:` the hostname up to the first dot (.) in the Fully-Qualified Domain Name. +3. `\W:` the basename of the current working directory, with $HOME abbreviated with a tilde (~). +4. `\$:` If the current user is root, display #, $ otherwise. + +For example, we may want to consider adding `\!` If we want to display the history number of the current command, or `\H` if we want to display the FQDN instead of the short server name. + +In the following example we will import both into our current environment by executing this command: + +``` +PS1="[\u@\H \W \!]\$" +``` + +When you press Enter you will see that the prompt content changes as shown below. Compare the prompt before and after executing the above command: + +[ + ![Customize Linux Terminal Prompt PS1](http://www.tecmint.com/wp-content/uploads/2017/01/Customize-Linux-Terminal-Prompt.png) +][1] + +Customize Linux Terminal Prompt PS1 + +Now let’s go one step further and change the color of the user and hostname in command prompt – both the text and its surrounding background. + +Actually, we can customize 3 aspects of the prompt: + +| Text Format | Foreground (text) color | Background color | +| 0: normal text | 30: Black | 40: Black | +| 1: bold | 31: Red | 41: Red | +| 4: Underlined text | 32: Green | 42: Green | +| | 33: Yellow | 43: Yellow | +| | 34: Blue | 44: Blue | +| | 35: Purple | 45: Purple | +| | 36: Cyan | 46: Cyan | +| | 37: White | 47: White | + +We will use the `\e` special character at the beginning and an `m` at the end to indicate that what follows is a color sequence. + +In this sequence the three values (background, format, and foreground) are separated by commas (if no value is given the default is assumed). + +**Suggested Read:** [Learn Bash Shell Scripting in Linux][2] + +Also, since the value ranges are different, it does not matter which one (background, format, or foreground) you specify first. + +For example, the following `PS1` will cause the prompt to appear in yellow underlined text with red background: + +``` +PS1="\e[41;4;33m[\u@\h \W]$ " +``` +[ + ![Change Linux Terminal Color Prompt PS1](http://www.tecmint.com/wp-content/uploads/2017/01/Change-Linux-Terminal-Color-Prompt.png) +][3] + +Change Linux Terminal Color Prompt PS1 + +As good as it looks, this customization will only last for the current user session. If you close your terminal or exit the session, the changes will be lost. + +In order to make these changes permanent, you will have to add the following line to `~/.bashrc` or `~/.bash_profile` depending on your distribution: + +``` +PS1="\e[41;4;33m[\u@\h \W]$ " +``` + +Feel free to play around with the colors to find what works best for you. + +##### Summary + +In this article we have explained how to customize the color and content of your Bash prompt. If you have questions or suggestions about this post, feel free to use the comment form below to reach us. We look forward to hearing from you! + +-------------------------------------------------------------------------------- + +作者简介:Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge. + +![](http://1.gravatar.com/avatar/4e444ab611c7b8c7bcb76e58d2e82ae0?s=128&d=blank&r=g) + +-------------------------------------------------------------------------------- + +via: http://www.tecmint.com/customize-bash-colors-terminal-prompt-linux/ + +作者:[Aaron Kili][a] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:http://www.tecmint.com/author/aaronkili/ +[1]:http://www.tecmint.com/wp-content/uploads/2017/01/Customize-Linux-Terminal-Prompt.png +[2]:http://www.tecmint.com/category/bash-shell/ +[3]:http://www.tecmint.com/wp-content/uploads/2017/01/Change-Linux-Terminal-Color-Prompt.png From edfdc671ad179bfa938f8c9b8c5a568df8e5a19f Mon Sep 17 00:00:00 2001 From: Ezio Date: Sat, 7 Jan 2017 15:41:05 +0800 Subject: [PATCH 08/22] =?UTF-8?q?20170107-4=20=E9=80=89=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rations and engineering trends for 2017.md | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 sources/tech/20170105 Top 8 systems operations and engineering trends for 2017.md diff --git a/sources/tech/20170105 Top 8 systems operations and engineering trends for 2017.md b/sources/tech/20170105 Top 8 systems operations and engineering trends for 2017.md new file mode 100644 index 0000000000..4bf221c5a4 --- /dev/null +++ b/sources/tech/20170105 Top 8 systems operations and engineering trends for 2017.md @@ -0,0 +1,78 @@ +Top 8 systems operations and engineering trends for 2017 +================= + +Forecasting trends is tricky, especially in the fast-moving world of systems operations and engineering. This year, at our Velocity Conference, we have talked about distributed systems, SRE, containerization, serverless architectures, burnout, and many other topics related to the human and technological challenges of delivering software. Here are some of the trends we see for the next year: + +### 1\. Distributed Systems + +We think this is important enough that we [re-focused the entire Velocity conference on it][1]. + + + +### 2\. Site Reliability Engineering + +[Site Reliability Engineering][3]—is it just ops? [Or is it DevOps by another name][4]? Google's profile for an ops professional calls for heavy doses of systems and software engineering. Spread further into the industry by Xooglers at companies like Dropbox, [hiring for SRE positions][5] continues to increase, particularly for web-facing companies with large data centers. In some contexts, the role of SREs becomes more about helping developers operate their own services. + +### 3\. Containerization + +Companies will continue to containerize their software delivery. Docker Inc. itself has positioned Docker as a tool for "[incremental revolution][6]," and containerizing legacy applications has become a common use case in the enterprise. What's the future of Docker? As engineers continue to adopt orchestration tools like Kubernetes and Mesos, the higher level of abstraction may make more room for other flavors of containers (like rkt, Garden, etc.). + +### 4\. Unikernels + +Are unikernels the next step after containerization? Are they unfit for production? Some tout the security and performance benefits of unikernels. Keep an eye out for how unikernels evolve in 2017, [particularly with an eye to what Docker Inc. does][7] in this area (having acquired Unikernel Systems this year). + +### 5\. Serverless + +Serverless architectures treat functions as the basic unit of computation. Some find the term misleading (and reminiscent of "noops"), and prefer to refer to this trend as Functions-as-a-Service. Developers and architects are experimenting with the technology more and more, and expect to see more applications being written in this paradigm. For more on what serverless/FaaS means for operations, check out the free ebook on [Serverless Ops][8] by Michael Hausenblas. + +### 6\. Cloud-Native application development + +Like DevOps, this term has been used and abused by marketers for a long while, but the Cloud Native Computing Foundation makes a strong case for these new sets of tools (often Google-inspired) that take advantage not just of the cloud, but in particular the strengths and opportunities provided by distributed systems—in short, microservices, containerization, and dynamic orchestration. + +### 7\. Monitoring + +As the industry has evolved from Nagios-style monitoring, to streaming metrics and visualizations, we've become great at producing loads of systems data. Interpretation is the next challenge. As such, we are seeing vendors offering machine learning-powered monitoring services, and, more generally, IT operations learning techniques for machine learning systems data. Similarly, as our infrastructure becomes more dynamic and distributed, monitoring becomes less and less about checking the health of individual resources and more about tracing flows between services. As such, distributed tracing has emerged. + +### 8\. DevOps Security + +With DevOpsSec increasing in popularity, [security is quickly becoming a team-wide concern][9]. The classic challenge of DevOps of achieving both velocity and reliability is especially pronounced when companies with security and compliance concerns are feeling the pinch to compete on speed. + +### Tell us about your work + +As an IT operations professional—whether you use the term sysadmin, DevOps, SRE, DBA, etc.—[you’re invited to share your insights][10] to help us learn about the demographics, work environments, tools, and compensation of practitioners in our growing field. All responses are reported in aggregate to assure your anonymity. The survey will require approximately 5–10 minutes to complete. Once we've closed the survey and analyzed the results, we'll share our findings with you. [Take the survey][11]. + +-------------------------------------------------------------------------------- + +作者简介: + +![](https://d3tdunqjn7n0wj.cloudfront.net/1440x1440/courtney-nash-crop-a9cb0b44a4262f20524d171195d6d485.jpg) + +Courtney Nash chairs multiple conferences for O'Reilly Media and is the strategic content director focused on areas of modern web operations, high performance applications, and security. An erstwhile academic neuroscientist, she is still fascinated by the brain and how it informs our interactions with and expectations of technology. She's spent 17 years working in the technology industry in a wide variety of roles, ever since moving to Seattle to work at a burgeoning online bookstore. Outside work, Courtney can be found biking, hiking, skiing, ... + +![](https://d3tdunqjn7n0wj.cloudfront.net/1440x1440/brian_anderson-ae207faed42e8b7a2e73b7f82573c8ea.jpg) + +Brian Anderson, Infrastructure and Operations Editor at O’Reilly Media, covers topics essential to the delivery of software — from traditional system administration, to cloud computing, web performance, Docker, and DevOps. He has been working in online education and serving the needs of working learners for more than ten years. + +-------------------------------------------------------------------------------- + +via: https://www.oreilly.com/ideas/top-8-systems-operations-and-engineering-trends-for-2017 + +作者:[Courtney Nash][a],[Brian Anderson][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]:https://www.oreilly.com/people/3f5d7-courtneyw-nash +[b]:https://www.oreilly.com/people/brian_anderson +[1]:https://www.oreilly.com/ideas/velocity-a-new-direction +[2]:https://www.oreilly.com/ideas/top-8-systems-operations-and-engineering-trends-for-2017?imm_mid=0ec113&cmp=em-webops-na-na-newsltr_20170106 +[3]:https://www.oreilly.com/ideas/what-is-sre-site-reliability-engineering +[4]:http://conferences.oreilly.com/velocity/devops-web-performance-ny/public/content/devops-sre-ama-video +[5]:https://www.glassdoor.com/Salaries/site-reliability-engineer-salary-SRCH_KO0,25.htm +[6]:http://blog.scottlowe.org/2016/06/21/dockercon-2016-day-2-keynote/ +[7]:http://www.infoworld.com/article/3024410/application-virtualization/docker-kicks-off-unikernel-revolution.html +[8]:http://www.oreilly.com/webops-perf/free/serverless-ops.csp?intcmp=il-webops-free-lp-na_new_site_top_8_systems_operations_and_engineering_trends_for_2017_body_text_cta +[9]:https://www.oreilly.com/learning/devopssec-securing-software-through-continuous-delivery +[10]:http://www.oreilly.com/webops-perf/2016-ops-survey.html +[11]:http://www.oreilly.com/webops-perf/2016-ops-survey.html From ecc5cc6384cd6ca859853484540d32c0bc42abd0 Mon Sep 17 00:00:00 2001 From: Ezio Date: Sat, 7 Jan 2017 15:51:19 +0800 Subject: [PATCH 09/22] =?UTF-8?q?20170107-5=20=E9=80=89=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...about traditional JavaScript benchmarks.md | 725 ++++++++++++++++++ 1 file changed, 725 insertions(+) create mode 100644 sources/tech/20161216 The truth about traditional JavaScript benchmarks.md diff --git a/sources/tech/20161216 The truth about traditional JavaScript benchmarks.md b/sources/tech/20161216 The truth about traditional JavaScript benchmarks.md new file mode 100644 index 0000000000..4d6925b2ac --- /dev/null +++ b/sources/tech/20161216 The truth about traditional JavaScript benchmarks.md @@ -0,0 +1,725 @@ +The truth about traditional JavaScript benchmarks +============================================================ + + +It is probably fair to say that [JavaScript][22] is _the most important technology_ these days when it comes to software engineering. To many of us who have been into programming languages, compilers and virtual machines for some time, this still comes a bit as a surprise, as JavaScript is neither very elegant from the language designers point of view, nor very optimizable from the compiler engineers point of view, nor does it have a great standard library. Depending on who you talk to, you can enumerate shortcomings of JavaScript for weeks and still find another odd thing you didn’t know about. Despite what seem to be obvious obstacles, JavaScript is at the core of not only the web today, but it’s also becoming the dominant technology on the server-/cloud-side (via [Node.js][23]), and even finding its way into the IoT space. + +That raises the question, why is JavaScript so popular/successful? There is no one great answer to this I’d be aware of. There are many good reasons to use JavaScript today, probably most importantly the great ecosystem that was built around it, and the huge amount of resources available today. But all of this is actually a consequence to some extent. Why did JavaScript became popular in the first place? Well, it was the lingua franca of the web for ages, you might say. But that was the case for a long time, and people hated JavaScript with passion. Looking back in time, it seems the first JavaScript popularity boosts happened in the second half of the last decade. Unsurprisingly this was the time when JavaScript engines accomplished huge speed-ups on various different workloads, which probably changed the way that many people looked at JavaScript. + +Back in the days, these speed-ups were measured with what is now called _traditional JavaScript benchmarks_, starting with Apple’s [SunSpider benchmark][24], the mother of all JavaScript micro-benchmarks, followed by Mozilla’s [Kraken benchmark][25] and Google’s V8 benchmark. Later the V8 benchmark was superseded by the[Octane benchmark][26] and Apple released its new [JetStream benchmark][27]. These traditional JavaScript benchmarks drove amazing efforts to bring a level of performance to JavaScript that noone would have expected at the beginning of the century. Speed-ups up to a factor of 1000 were reported, and all of a sudden using `