iproute2 对决 net-tools

@热情萧远山 @kykij

学习下

都用的路过//@相公12345:转发微博

原来是两套工具…

@我的印象笔记 //@平凡的香草:一直不知道 netstat -s 的输出怎么用ss 来代替，求解//@ruochen_SH: @热情萧远山 @kykij

//@亚瑟小马甲:转发微博

//@亚瑟小马甲:转发微博

我觉得也时候适应一下新的命令了@我的印象笔记

Repost

[炸鸡和啤酒]

看看

@我的印象笔记

如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具（统称为net-tools）来配置网络功能，解决网络故障。net-tools起源于BSD的TCP/IP工具箱，后来成为老版本Linux内核中配置网络功能的工具。但自2001年起，Linux社区已经对其停止维护。同时，一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools，只支持iproute2。 作为网络配置工具的一份子，iproute2的出现旨在从功能上取代net-tools。net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置，而iproute2则通过netlink

# iproute2 对决 net-tools

如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具（统称为net-tools）来配置网络功能，解决网络故障。net-tools起源于BSD的TCP/IP工具箱，后来成为老版本Linux内核中配置网络功能的工具。**但自2001年起，Linux社区已经对其停止维护。**同时，一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools，只支持iproute2。

作为网络配置工具的一份子，iproute2的出现旨在从功能上取代net-tools。net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置，而iproute2则通过netlink套接字接口与内核通讯。抛开性能而言，iproute2的用户接口比net-tools显得更加直观。比如，各种网络资源（如link、IP地址、路由和隧道等）均使用合适的对象抽象去定义，使得用户可使用一致的语法去管理不同的对象。更重要的是，到目前为止，iproute2仍处在[持续开发](https://www.kernel.org/pub/linux/utils/net/iproute2/)中。

如果你仍在使用net-tools，而且尤其需要跟上新版Linux内核中的最新最重要的网络特性的话，那么是时候转到iproute2的阵营了。原因就在于使用iproute2可以做很多net-tools无法做到的事情。

对于那些想要转到使用iproute2的用户，有必要了解下面有关net-tools和iproute2的众多对比。

### 显示所有已连接的网络接口

下面的命令显示出所有可用网络接口的列表（无论接口是否激活）。

使用**net-tools**：

```
$ ifconfig -a

```

使用**iproute2**：

```
$ ip link show

```

### 激活或停用网络接口

使用这些命令来激活或停用某个指定的网络接口。

使用**net-tools**：

```
$ sudo ifconfig eth1 up
$ sudo ifconfig eth1 down

```

使用**iproute2**：

```
$ sudo ip link set down eth1
$ sudo ip link set up eth1

```

### 为网络接口分配IPv4地址

使用这些命令配置网络接口的IPv4地址。

使用**net-tools**：

```
$ sudo ifconfig eth1 10.0.0.1/24

```

使用**iproute2**：

```
$ sudo ip addr add 10.0.0.1/24 dev eth1

```

值得注意的是，可以使用iproute2给同一个接口分配多个IP地址，ifconfig则无法这么做。使用ifconfig的变通方案是使用[IP别名](http://xmodulo.com/2013/02/how-to-assign-multiple-ip-addresses-to-one-network-interface-on-centos.html)。

```
$ sudo ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev eth1
$ sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev eth1
$ sudo ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev eth1

```

### 移除网络接口的IPv4地址

就IP地址的移除而言，除了给接口分配全0地址外，net-tools没有提供任何合适的方法来移除网络接口的IPv4地址。相反，iproute2则能很好地完全。

使用**net-tools**：

```
$ sudo ifconfig eth1 0

```

使用**iproute2**：

```
$ sudo ip addr del 10.0.0.1/24 dev eth1

```

### 显示网络接口的IPv4地址

按照如下操作可查看某个指定网络接口的IPv4地址。

使用**net-tools**：

```
$ ifconfig eth1

```

使用**iproute2**：

```
$ ip addr show dev eth1

```

同样，如果接口分配了多个IP地址，iproute2会显示出所有地址，而net-tools只能显示一个IP地址。

### 为网络接口分配IPv6地址

使用这些命令为网络接口添加IPv6地址。net-tools和iproute2都允许用户为一个接口添加多个IPv6地址。

使用**net-tools**：

```
$ sudo ifconfig eth1 inet6 add 2002:0db5:0:f102::1/64
$ sudo ifconfig eth1 inet6 add 2003:0db5:0:f102::1/64

```

使用**iproute2**：

```
$ sudo ip -6 addr add 2002:0db5:0:f102::1/64 dev eth1
$ sudo ip -6 addr add 2003:0db5:0:f102::1/64 dev eth1

```

### 显示网络接口的IPv6地址

按照如下操作可显示某个指定网络接口的IPv6地址。net-tools和iproute2都可以显示出所有已分配的IPv6地址。

使用**net-tools**：

```
$ ifconfig eth1

```

使用**iproute2**：

```
$ ip -6 addr show dev eth1

```

### 移除网络设备的IPv6地址

使用这些命令可移除接口中不必要的IPv6地址。

使用**net-tools**：

```
$ sudo ifconfig eth1 inet6 del 2002:0db5:0:f102::1/64

```

使用**iproute2**：

```
$ sudo ip -6 addr del 2002:0db5:0:f102::1/64 dev eth1

```

### 改变网络接口的MAC地址

使用下面的命令可[篡改网络接口的MAC地址](http://xmodulo.com/2014/02/spoof-mac-address-network-interface-linux.html)，请注意在更改MAC地址前，需要停用接口。

使用**net-tools**：

```
$ sudo ifconfig eth1 hw ether 08:00:27:75:2a:66

```

使用**iproute2**：

```
$ sudo ip link set dev eth1 address 08:00:27:75:2a:67

```

### 查看IP路由表

net-tools中有两个选择来显示内核的IP路由表：route和netstat。在iproute2中，使用命令ip route。

使用**net-tools**：

```
$ route -n

```

---

```
$ netstat -rn

```

使用**iproute2**：

```
$ ip route show

```

### 添加和修改默认路由

这里的命令用来添加或修改内核IP路由表中的默认路由规则。请注意在net-tools中可通过添加新的默认路由、删除旧的默认路由来实现修改默认路由。在iproute2使用ip route命令来代替。

使用**net-tools**：

```
$ sudo route add default gw 192.168.1.2 eth0
$ sudo route del default gw 192.168.1.1 eth0

```

使用**iproute2**:

```
$ sudo ip route add default via 192.168.1.2 dev eth0
$ sudo ip route replace default via 192.168.1.2 dev eth0

```

### 添加和移除静态路由

使用下面命令添加或移除一个静态路由。

使用**net-tools**：

```
$ sudo route add -net 172.16.32.0/24 gw 192.168.1.1 dev eth0
$ sudo route del -net 172.16.32.0/24

```

使用**iproute2**：

```
$ sudo ip route add 172.16.32.0/24 via 192.168.1.1 dev eth0
$ sudo ip route del 172.16.32.0/24

```

### 查看套接字统计信息

这里的命令用来查看套接字统计信息（比如活跃或监听状态的TCP/UDP套接字）。

使用**net-tools**：

```
$ netstat
$ netstat -l

```

使用**iproute2**：

```
$ ss
$ ss -l

```

### 查看ARP表

使用这些命令显示内核的ARP表。

使用**net-tools**:

```
$ arp -an

```

使用**iproute2**:

```
$ ip neigh

```

### 添加或删除静态ARP项

按照如下操作在本地ARP表中添加或删除一个[静态ARP项](http://xmodulo.com/2013/02/how-to-add-or-remove-static-arp-entry-on-linux.html)。

使用**net-tools**：

```
$ sudo arp -s 192.168.1.100 00:0c:29:c0:5a:ef
$ sudo arp -d 192.168.1.100

```

使用**iproute2**：

```
$ sudo ip neigh add 192.168.1.100 lladdr 00:0c:29:c0:5a:ef dev eth0
$ sudo ip neigh del 192.168.1.100 dev eth0

```

### 添加、删除或查看多播地址

使用下面的命令配置或查看网络接口上的多播地址。

使用**net-tools**:

```
$ sudo ipmaddr add 33:44:00:00:00:01 dev eth0
$ sudo ipmaddr del 33:44:00:00:00:01 dev eth0
$ ipmaddr show dev eth0
$ netstat -g

```

使用**iproute2**：

```
$ sudo ip maddr add 33:44:00:00:00:01 dev eth0
$ sudo ip maddr del 33:44:00:00:00:01 dev eth0
$ ip maddr list dev eth0

```

---

via: <http://xmodulo.com/2014/09/linux-tcpip-networking-net-tools-iproute2.html>

作者：[Dan Nanni](http://xmodulo.com/author/nanni) 译者：[KayGuoWhu](https://github.com/KayGuoWhu) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


Linux有问必答：如何检查Linux上的glibc版本

Summary: 问题：我需要找出我的Linux系统上的GNU C库（glibc）的版本，我怎样才能检查Linux上的glibc版本呢？  GNU C库（glibc）是标准C库的GNU实现。glibc是GNU工具链的关键组件，用于和二进制工具和编译器一起使用，为目标架构生成用户空间应用程序。 当从源码进行构建时，一些Linux程序可能需要链接到某个特定版本的glibc。在这种情况下，你可能想要检查已安装的glibc信息以查看是否满足依赖关系。 这里介绍几种简单的方法，方便你检查Linux上的glibc版本。  方法一 下面给出了命令行下检查GNU C库的简单命令。 $ ldd --version   在本例中，gli

[耶]

[吃惊]//@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

长见识了

有//@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

一直都可以啊啊啊啊，都是标准elf可执行文件//@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

@我的印象笔记

这是一个好文章 //@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

@我的印象笔记

我擦，第一次[哼]//@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

win下的dll却不可以，地址空间不同。//@cjacker:loader当然是可以执行的啦，只不过起了个.so的名字。//@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

这样也可以.... //@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

mark //@Linux中国:话说我是第一次知道 libc 的.so 库可以直接在命令行执行，有和我一样不知道的么？

# Linux有问必答：如何检查Linux上的glibc版本

>
> **问题**：我需要找出我的Linux系统上的GNU C库（glibc）的版本，我怎样才能检查Linux上的glibc版本呢？
>
>
>

GNU C库（glibc）是标准C库的GNU实现。glibc是GNU工具链的关键组件，用于和二进制工具和编译器一起使用，为目标架构生成用户空间应用程序。

当从源码进行构建时，一些Linux程序可能需要链接到某个特定版本的glibc。在这种情况下，你可能想要检查已安装的glibc信息以查看是否满足依赖关系。

这里介绍几种简单的方法，方便你检查Linux上的glibc版本。

### 方法一

下面给出了命令行下检查GNU C库的简单命令。

```
$ ldd --version

```

在本例中，**glibc**版本是**2.19**。

### 方法二

另一个方法是在命令行“输入”**glibc 库的名称**（如，libc.so.6），就像命令一样执行。

输出结果会显示更多关于**glibc库**的详细信息，包括glibc的版本以及使用的GNU编译器，也提供了glibc扩展的信息。glibc变量的位置取决于Linux版本和处理器架构。

在基于Debian的64位系统上：

```
$ /lib/x86_64-linux-gnu/libc.so.6

```

在基于Debian的32位系统上：

```
$ /lib/i386-linux-gnu/libc.so.6

```

在基于Red Hat的64位系统上：

```
$ /lib64/libc.so.6

```

在基于Red Hat的32位系统上：

```
$ /lib/libc.so.6

```

下图中是输入glibc库后的输出结果样例。

---

via: <http://ask.xmodulo.com/check-glibc-version-linux.html>

译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


DebianFork 将发布没有 systemd 的 Debian 分支

Summary: 编者按：Debian 8 Jessie的 init 系统默认使用 systemd，这一选择在社区引发了大量争议，导致了技术委员会的多名成员辞职。现在，老兵 Unix 管理员宣布要创建一个新的不使用 sytemd 的Debian 分支。这群 Unix 哲学拥护者们请求外界捐赠支持他们的新使命。 以下内容来自 debianfork.org 的相关内容：    我们是谁？！ 我们是老兵 Unix 管理员（Veteran Unix Admins），我们非常关注Debian GNU/Linux 在 systemd 上的分歧，并且决定分支（fork）Debian 项目。 为什么我们要这样做？ 我们中的一些人是上游开发者，一些人是专业的系统管理员：

这是要搞分裂么？

被redhat那sb给惹毛了吧

但是我也对其有担忧……"还是脚本比较容易学习，如果把它硬编码但程式里面，那能学到的东西就更少了不是么？"//@sub7:systemd还是不错的，开关机速度都大幅提升，争议这么多主要还是操作习惯之争[doge]

@shengofbig @天天天蓝zju

行行行

=，=这不就解决了吗=，=各取所需就好了=，=非得吵//@土星人小白: 行行行

统一所有人的观点本来就不现实=，=个人认为这样的结果是最理想的。。。//@土星人小白: Now here's the birth to a new, non-universal Debian. //@非洲Aji開源哥_lisp:=，=这不就解决了吗=，=各取所需就好了=，=非得吵//@土星人小白: 行行行

实在是…蛮无语的…我觉得systemd还蛮好的呀//@土星人小白:Now here's the birth to a new, non-universal Debian. //@非洲Aji開源哥_lisp:=，=这不就解决了吗=，=各取所需就好了=，=非得吵//@土星人小白: 行行行

Debian分裂了！

分裂了...

分裂了的debian希望能够变好

硬编码？学到的东西就很少了？那干脆不要用Linux内核，因为内核不是用脚本语言写的。日志文件必须文本化理由也牵强，照这样说也可以不要数据库。

这种事在开源界大概也是见怪不怪了。有意见？那就fork一个呗

个人倾向于桌面系统支持SystemD，而服务器还是免了吧

systemd写启动脚本更方便了，从用户角度来说操作也方便。至于实现太复杂的话kernel不是更复杂。

桌面systemd，服务器sysV

对于桌面来说，systemd确实是个不错的选择，但是对于SA来说，对于系统的可控制行降低了，出了问题，只能等上游更新，这是很要命的。

从这个角度讲，开源产品允许用户自己修改源代码是理论性的。可否自己修改代码，被多种条件限制，比如用户能否读懂，以后能否同上游代码合并等。至于可控制方面，光靠脚本对系统进行控制程度有多深，不好下定论。

其实我个人觉得，即便 systemd 以后不兼容 sysV，但依然存在变通方法来实现脚本方法启动的可能。自己建立一个 root.sh, 然后在里面写入要调用的脚本，最后将 root.sh 配置为 systemd 的一个服务。

不是脚本的问题，而是系统管理员们对缺乏对底层控制的恐惧——和 WINDOWS 的注册表一样，你只能修改这些值，而并不知道他们是如何发生作用的——当然，你可以去看源代码，但是庞大而无所不包的 systemd 将事情搞得很复杂，也不够透明，自然困难得多。

其实我赞同一个意见，就是 Linux 一分为二，一方面是桌面，采用 systemd，有利于桌面的控制，反正桌面用户也是通过各种控制界面来操作的，并不需要关心底层；另外一方面是服务器，则采用古典的 sysvinit，便于对底层的直接干预和调整。

确实是这样。这种分割也不是不可行，就如同 android，也是 linux 分支，但是其走了完全不同的一个路线。

真乱[挖鼻屎][挖鼻屎][挖鼻屎]//@Linux中国:我赞同一分为二的那种意见，这样看，CentOS 是走服务器路线的，应该不用 systemd，所以即便不 fork CentOS 7，也会有相当一部分人继续坚守 CentOS 6//@ZERO___O: CentOS也fork一个就好了，这傻屌用了反人类 //@开源新闻发布台: 这是要搞分裂么？

CentOS不本來就是RHEL的fork麼[挖鼻屎]。以及systemd又不是專門針對桌面的，服務器上用systemd的好處對打包者和開發者顯而易見。唯一不爽的只有系統管理員而已……//@Linux中国: 我赞同一分为二的那种意见，这样看，CentOS 是走服务器路线的，应该不用 systemd，所以即便不 fork CentOS 7，也会有…

在系统内部//@Linux中国: 对，对开发者和打包者的好处显而易见，可是真正用的是系统管理员啊——如文中说的，用户至上呢？//@farseerfc: CentOS不本來就是RHEL的fork麼[挖鼻屎]。以及systemd又不是專門針對桌面的，服務器上用systemd的好處對打包者和開發者顯而易見。唯一不爽的只有系統管理員而已……

有那功夫 fork 不如想想办法怎么让启动脚本兼容 sysvinit 和 systemd。CoreOS 也用了 systemd 呢，火的很。//@Linux中国: 对，对开发者和打包者的好处显而易见，可是真正用的是系统管理员啊——如文中说的，用户至上呢？//@farseerfc: CentOS不本來就是RHEL的fork麼[挖鼻屎]。以及systemd又不是專門

美术姑娘这里不妨也影射一下 ：用户是分层次的，胡乱一气的至上会影响管理员的职业素养的！反正也没想看如文章里面影射的东西。而管理员的职业素养有很重要的一个维度就是始终如一的审美框架和实质～！

systemd兼容sysvinit的啓動腳本的……只是不推薦（因爲不能利用很多高級特性）。 //@纤夫张:有那功夫 fork 不如想想办法怎么让启动脚本兼容 sysvinit 和 systemd。CoreOS 也用了 systemd 呢，火的很。

作为个人用户，当过开发/打包/系统管理者，对systemd一点吐槽点也木有。。老外就是矫情 //@Linux中国:对，对开发者和打包者的好处显而易见，可是真正用的是系统管理员啊——如文中说的，用户至上呢？//@farseerfc: 服務器上用systemd的好處對打包者和開發者顯而易見。唯一不爽的只有系統管理員而已……

作为一名用户，我觉得 systemd 用起来也很方便的呀。开发者/打包者写好了service文件，我只需要start就好了。多爽。 //@Linux中国:对，对开发者和打包者的好处显而易见，可是真正用的是系统管理员啊——如文中说的，用户至上呢？

//@Linux中国:对，对开发者和打包者的好处显而易见，可是真正用的是系统管理员啊——如文中说的，用户至上呢？//@farseerfc: CentOS不本來就是RHEL的fork麼[挖鼻屎]。以及systemd又不是專門針對桌面的，服務器上用systemd的好處對打包者和開發者顯而易見。唯一不爽的只有系統管理員而已……

这个我就不说什么了。。。。

分吧，反正这个圈的人都爱折腾，不折腾不舒服斯基。 //@dtrace://@Linux中国:我赞同一分为二的那种意见，这样看，CentOS 是走服务器路线的，应该不用 systemd，所以即便不 fork CentOS 7，也会有相当一部分人继续坚守 CentOS 6//@ZERO___O: CentOS也fork一个就好了，这傻屌用了反人类 //

要的就是那些高级特性能够 gracefully fail on sysvinit，不至于整个服务完全没法用。 //@farseerfc: systemd兼容sysvinit的啓動腳本的……只是不推薦（因爲不能利用很多高級特性）。 //@纤夫张:有那功夫 fork 不如想想办法怎么让启动脚本兼容 sysvinit 和 systemd。CoreOS 也用了 systemd 呢，火的很

不會沒法用，如果用sysvinit那麼也沒有那些高級特性(socket激活、dbus激活，失敗自動重啓，pid文件檢測等)，於是systemd下就算沒有也影響不大呀。不過還是有一個高級特性是透明可用的：並行啓動。我自己的arch機器在2012年9月開始用systemd到2013年12月刪掉sysinit-tools期間一直在用個別sysv的舊服務

如果能让用户自己选 init 就好了……但个人还是比较喜欢 systemd 的，too young 了吧 //@Linux中国:我赞同一分为二的那种意见，这样看，CentOS 是走服务器路线的，应该不用 systemd，所以即便不 fork CentOS 7，也会有相当一部分人继续坚守 CentOS 6//@ZERO___O: CentOS也fork一个就好了，这傻屌用了反

每当争议无法和解的时候，新分支就会诞生。但是这个分支的前途会怎样，谁也无法预料。

物竞天择吧。

这篇文章很有意思。也可能是翻译的有趣。@wxy 赞一个！

首先是题图。太像拿叉子吃面条了。

另外，文中也有很多有意思的句子：

你也许认为我不够强大，但是你也太胖了！

放开那个 Init ！不要和 systemd 和它的那堆零碎纠缠在一起。

这不是比谁的胡子更长，放心，毛茸茸的不总是绵羊！

哈哈，谬赞谬赞，原文也比较轻松风趣，我也尽量翻译时候跟随~~题图是他们的 LOGO，SVG，我专门换成 PNG 的。。

分裂了好，名字我都想好了，就叫dabian吧//@rmrf:分吧，反正这个圈的人都爱折腾，不折腾不舒服斯基。

DebianFork 的项目名称正式定名为： Devuan - http://t.cn/RzVvkTW

# DebianFork 将发布没有 systemd 的 Debian 分支

编者按：Debian 8 Jessie的 init 系统默认使用 systemd，这一选择在社区引发了大量争议，导致了技术委员会的[多名成员辞职](http://linux.cn/article-4256-1.html)。现在，“老兵 Unix 管理员”宣布要创建一个新的不使用 sytemd 的 [Debian 分支](http://debianfork.org/)。这群 Unix 哲学拥护者们请求外界[捐赠](http://debianfork.org/donate.html)支持他们的新使命。

以下内容来自 debianfork.org 的相关内容：

---

// 更新： 项目名称正式命名为：[Devuan](https://devuan.org/)。

<img src="content_image/album_201411_29_010211lt44nnckfkzakd4m.png" alt="" title="">

#### 我们是谁？！

我们是老兵 Unix 管理员（Veteran Unix Admins），我们非常关注 Debian GNU/Linux 在 systemd 上的分歧，并且决定分支（fork）Debian 项目。

#### 为什么我们要这样做？

我们中的一些人是上游开发者，一些人是专业的系统管理员：我们每天都要和 Debian 打各种交道。

我们不想被强迫使用 systemd 来替代传统的 UNIX sysvinit 初始化系统，因为 systemd 背离了 UNIX 哲学。

我们考虑采用贴近 sysvinit 的架构，而不是那种破坏了“做一件事，把它做好”的原则、带着数十个紧密耦合的二进制文件和不透明的日志的东西。

#### 有比创建分支更好的解决方案么？

不幸的是，目前没有！

在下一代的 Debian v.8 "Jessie" 发行版中，默认的初始化系统将是 systemd，它将挟裹着一堆紧密纠缠的东西来到。

我们需要分离这些依赖的牵扯，从所有受到影响的软件包中清除这些，并提供相应的替代品。我们所要创建的分支的稳定性是目前阶段所要考虑的首要重点。

#### 你觉得为什么会走到了这一步？

现在的 Debian 项目的领导者受到了 GNOME 开发者太多的影响，而且在项目中考虑了太多的桌面需求的因素，而 Debian 用户却大多数是精通技术的系统管理员。

而且，今天 Debian 正逐渐背离自己最初愿景，也是开源软件的基石：用户至上。这到底是怎么了？所谓的“do-ocracy”开发者和包维护者正在给用户强加他们的选择。

#### 你可以说一下你对 systemd 的意见吗？

套用一下 Eric S. Raymond 在这个问题上的看法，我们认为 systemd 很容易就会发生嬗变，进而臃肿不堪、最后变成了那种讨厌的纠结在一起的毛球。

我们希望能够用可以阅读的 shell 脚本来控制系统的启动，因为可读性能够给我们这些有能力的人更多的控制和洞悉。我们认为，在一个守护进程中集中控制服务、socket、设备、挂载等等，是对传统的 UNIX 哲学的一记响亮耳光。

某些支持 systemd 的人对此的快速回应可以在 [forkfedora.org](https://web.archive.org/web/20141020161905/http://forkfedora.org/) （已经关闭，需要翻墙才能看历史归档）上看到。这个页面突出了两者之间的根本不同：systemd 也许对于配置 init 来说很简单，但是它增加了 init 过程中的不透明度。在 systemd 中很明确是这样的：可以通过更少的变量来调整，而通过远超 sysvinit 大小的程序将大部分细节隐藏在一个巨大的二进制程序里面。

```
  ls -lH /sbin/init
  sysvinit: -rwxr-xr-x 1 root root 36992 Jul 14  2013 /sbin/init
  systemd: -rwxr-xr-x 1 root root 1317632 Sep  1 14:41 /sbin/init
# 你也许认为我不够强大，但是你也太胖了！
```

可以说 systemd 的安全模式更多的依赖于开发者和包维护者，而不怎么指望系统管理员。作为 Debian 用户，我们只是希望不要被强迫必须如此，看看 [CTTE 关于这个问题的投票就会知道](https://news.ycombinator.com/item?id=7203364)，我们相信这样下去会越来越多的听到用户要求：**放开那个 Init ！不要和 systemd 和它的那堆零碎纠缠在一起。**

#### 你们能坚持多久？

这不是比谁的胡子更长，放心，毛茸茸的不总是绵羊！

#### 概括一下计划?

“放开那个 Init”（ Init Freedom），这是我们的承诺，我们会建立一个 Debian 项目的分支，创建一个新的基础发行版。

这需要一些时间，我们会一步步来。

首先我们会配合 Debian 8 "Jessie" 的发布，给当前的 Debian 用户平滑升级提供一个完整的解决方案。

如果你也需要这个，请帮助我们： [捐赠](http://debianfork.org/donate.html) 或者参与进来。

#### 我们需要谈谈。

当然，您可以写电子邮件给 [VUA@debianfork.org](mailto:VUA@debianfork.org) 。

我们也有一些人聚集在 IRC ， Freenode 频道号是 #debianfork ，欢迎加入。

[可以订阅邮件列表](https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng)。喜欢的话来发布意见吧，不管是什么。

#### 只有你们这些家伙吗？

不是，有很多用户都对 systemd 有意见。

有一篇文章是对这个问题的很好的介绍： [Systemd: Linux 世界末日的预兆](http://www.infoworld.com/article/2608798/data-center/systemd--harbinger-of-the-linux-apocalypse.html)。

有个 [boycott systemd](http://boycottsystemd.org/) 网站也有一些相关的资料。那里有个叫做 [uselessd](http://uselessd.darknedgy.net/) 的 “systemd 分支”，有些不错的地方和许多笑点（lulz）。

还有人提出了一个 [当世界 systemd 了](http://the-world-after-systemd.ungleich.ch/)之后的撤退战略。

在维基百科的 [systemd reception](http://en.m.wikipedia.org/wiki/Systemd#Reception) 章节也有一些对其提出的批评意见。

#### 谢谢你做的这些，我怎么帮助你们？

老兵 Unix 管理员（Veteran Unix Admins）的一个小型的核心小组正在积极建设分支的相关框架和一些用于开发的基础设施。

这时的捐赠有助于我们确定可以在基础架构上投入多少以及人们的对我们的预期。

如果你会捐赠，那么[来吧](http://debianfork.org/donate.html)。

如我们现在做的，我们会在此一直更新我们的项目进展。

#### 对于你做的这些，人们是怎么看的?

下面是我们收到的一些邮件（略，请参照[原链接](http://debianfork.org/)），我们会匿名发表这些信息，除非你申明不用。

我们会保密你的邮件地址，并会通知你我们的下一步进展。


Systemd这个有争议的项目正在接管你身边的Linux发行版

Summary: Systemd 是目前为止在Linux平台上最有争议的项目之一。它到底有多大的争议？它的争议大到systemd的开发者之一Lennart Poettering 声称有人使用比特币雇佣职业杀手要干掉他。但是还是有比较理智的做法的，有一个抵制systemd网站在技术角度上提出了抵制systemd的原因。 如此强烈的抵制也反映了systemd的成功。它已经被或将要被Fedroa、OpenSUSE、Ubuntu、Debian、Arch Linux等众多发行版采用。随着时间推移，GNOME越来越依赖它，Debian回归GNOME的原因之一就是它采用了systemd。systemd无处不在！ 那么如此激烈的争论到底是关于什么呢？让我

Systemd：不要跟我抢！全都是我的~

原来如此

ubuntu接纳商业代码也受抨击，但解决了可用性，并使开源向前进步。如果没有亲身体验开源的产品，又不曾沟通与贡献。可以认为对所言之事没有充份理解，也不应获得发言权。给予真正动手贡献价值的人合适的权力，让他们决定作什么。只会叫喊的人不会给世界带来任何帮助，蚊字般的噪音。

在桌面端用systemd好像没有什么不妥，但用在服务器上……系统管理员岂不是要哭了

哈哈哈哈哈哈哈哈哈有人使用比特币雇佣杀手干掉他

新老交替引发的血案

个人感受就是systemd太复杂了，而且也没感觉比sysv快。

开源社区革命派与保守派之间的斗争//@Hadoop中国:新老交替引发的血案

//@Hadoop中国:新老交替引发的血案

[哈哈] 用比特币雇佣杀手暗杀他，开源社区的正反派斗争真是血雨腥风

就别管他有没有争议了，有没有干货好好介绍一下．

争议是难以避免的。我没有仔细研究过，没有发言权。

@Linux_cn @校长Ubuntu @Deepin官方微博 //@Go语言中文论坛_golang: 就别管他有没有争议了，有没有干货好好介绍一下．

虽然还没太深入了解过，稍微用了下表示不太喜欢

复杂的东西都是由简单的东西组成的，那些人把UNIX哲学的东西学得有些死，如果这个systemd的各模块间易于管理，条理分明而又合作无间，它就是不错的。而且对linux桌面的标准化有利。（以上个人观点）

就用过的CentOS7的改动来说，不习惯firewalld，还是改回了iptables。systemd倒不排斥，整合了chkconfig，init，service这些之后觉得挺方便的，就是runlevel变成target管理之后不习惯

回复@西安气象爱好者:systemd自带daemontools功能，这个还是不错的，现在所有sysvinit管理的服务不会自动重启，很多人没意识到吧。//@西安气象爱好者:变动太大，没啥必要，以前的init用的好好的，配置什么的都很顺手，也许我就是一个保守派。

自从arch转向systemd以来就十分讨厌这个项目了

关键是systemd难用啊！//@Hadoop中国:新老交替引发的血案

难道那个人名不应该是linus？

回复@FindBlog:晕倒。。。抱歉笔误。。

systemd的开发者之一Lennart Poettering 声称有人使用比特币雇佣职业杀手要干掉他，那么问题来了，通过bitcion作为匿名交易媒介能否开发一个杀手网站呢？

任何一个试图降低Linux使用门槛的工具都会遭到很多开源狗的反对——同时它们还反对Win32系统，我很怀疑这帮人究竟在反对什么，是商业软件还是一般水平市民也能使用计算机这件事？

用了systemd之后，觉得整个系统有一种很统一的感觉，总体体验是不错，不过相应的扩展性应该会差一点，但是个人还是倾向于使用sysyemd的。<br />
感觉社区一般会反对大而全的东西，这也挺正常的啦。就像iproute2和net-tool之间的争论一样。

相比起来，我对iproute2 感觉可以接受多了。。

要发生命案了，linus都没表态

gentood在这方面还是非常不错的

不懂

我到觉得systemd管得太多了，平时用着挺好，但是一旦出了问题，你是无从下手的。也许从桌面端来看systemd是一个很棒的东西，但对于管服务器那帮人来说，可能就。。。

mark

那么问题来了，如果发生比特币雇凶杀人，万年一年级生柯南可以破案么？

早就意识到了啊。不过sysvinit管理的服务一般都比较成熟，质量过得去//@纤夫张: 回复@西安气象爱好者:systemd自带daemontools功能，这个还是不错的，现在所有sysvinit管理的服务不会自动重启，很多人没意识到吧

用arch爱上systemd觉得init丑陋不堪，用centos7爱上firewalld觉得iptables丑陋不堪，期待接下来会爱上什么

“并且处理设备接入或推出时所产生的事件” 这里的“推出”应该是“退出”； 当然，这只是个细节问题，感谢译者和校对人员的辛勤付出！

不是，确实是“推出”，类似光盘一样的。在磁盘卷上，应该是指卸载。不过意思到了，大家明白就行。

我爱上了networkd，觉得dhcpcd丑陋不堪！还有systemd-boot，也随之抛弃了grub

Systemd macht frei. noch CC卐V ...

来自河南郑州的 Yandex Browser 20.4|GNU/Linux 用户

ueber D: d-mk-ultra点bokee点com/

systemd: D=Deutschland  CC卐V的设计者来自德国城市Karlsruhe.

Hitler: "Demoralize the enemy from within by surprise, terror, sabotage, assassination. That is the war of the future."

Josef Goebbells: “If you tell a lie big enough and keep repeating it, people will eventually come to believe it.”

更多: d-mk-ultra.bokee.com

来自河南郑州的 Yandex Browser 20.9|GNU/Linux 用户

Arbeit macht frei. Systemd macht frei. Nazis machen frei ...

# Systemd这个有争议的项目正在接管你身边的Linux发行版

<img src="content_image/album_201411_30_100852jyzrby2g62bc666c.jpg" alt="" title="">

Systemd 是目前为止在Linux平台上最有争议的项目之一。它到底有多大的争议？它的争议大到systemd的开发者之一Lennart Poettering 声称有人使用[比特币](http://www.pcworld.com/article/2033715/7-things-you-need-to-know-about-bitcoin.html)雇佣职业杀手要干掉他。但是还是有比较理智的做法的，有一个[抵制systemd网站](http://boycottsystemd.org/)在技术角度上提出了抵制systemd的原因。

如此强烈的抵制也反映了systemd的成功。它已经被或将要被Fedroa、OpenSUSE、Ubuntu、Debian、Arch Linux等众多发行版采用。随着时间推移，GNOME越来越依赖它，Debian[回归GNOME](http://www.pcworld.com/article/2691192/how-gnome-3-14-is-winning-back-disillusioned-linux-users.html)的原因之一就是它采用了systemd。systemd无处不在！

那么如此激烈的争论到底是关于什么呢？让我们近距离观察这场战争。

### Systemd是一个全新的init

[Systemd](http://www.freedesktop.org/wiki/Software/systemd/)的核心是取代老旧的[SysV init](http://en.wikipedia.org/wiki/Init#SysV-style)。init用来初始化你的操作系统，当你启动系统时，init负责加载需要的驱动，激活你的网络链接，启动众多的系统服务，最后进入图形登陆界面。而SysV init 是一个老旧的系统，它基本上仅运行**/etc/init.d**目录下的一些脚本。

Systemd是一个现代技术，用以取代老旧以及粗糙的SysV init。它可以在接收到事件响应时启动相关服务；比如，当你接入了一个USB打印机，systemd可以在接收到设备接入响应时启动打印服务。当它接收到某个网络端口的连接请求时，它可以启动在此端口上监听的服务并且传递这个连接。

获取更多关于SysV init 与 systemd的信息，可以参考Jorgen Schäfer的 “[Why systemd?](http://blog.jorgenschaefer.de/2014/07/why-systemd.html)”

### 但是systemd远不止此

systemd的反对者之中也有部分人认为SysV太老了，应该被取代掉。但是批评systemd的人发现Systemd是一个巨大的项目，其中包括了很多其他的功能。它是一个软件套件，而不仅仅是一个init。

*[维基共享资源](http://en.wikipedia.org/wiki/File:Systemd_components.svg) systemd 结构图解*

Systemd包括用于管理用户登陆的守护进程logind，还包括journald，并且journald 颇有争议的使用了二进制形式保存系统日志而不是以文本形式。systemd也采用了[udev](http://en.wikipedia.org/wiki/Udev)的思想及代码，它对**/dev/**目录下的虚拟设备文件进行管理，并且处理设备接入或推出时所产生的事件。除了这些还有很多其他的，如：systemd还包括了[cron](http://en.wikipedia.org/wiki/Cron)风格的任务调度器与网络守护进程networkd等等。

### 抨击者认为systemd不是类UNIX风格

多数的抱怨源于人们认为systemd项目太大以至于超出了它的工作范围，并且它从Linux系统接管的部分太多了。不要感到惊奇，systemd的抵制活动是以下面的抱怨开始的：

>
> "systemd文件是一大堆的复杂的高度耦合的二进制组成的，这违反了UNIX哲学：‘做一件事情，并把它做好’。它超出了一个init程序的职责范围，因为它还有电源管理，设备管理，挂载管理，cron（定时执行工具），磁盘加密，socket接口/inetd，syslog，网络配置，登陆/会话管理，文件预读，GPT分区发现，容器注册，hostname/locale/time管理，mDNS/DNS-SD等功能，它将Linux控制台以及其他的一些功能都包装在一个程序里面。
>
>
>

那么，systemd是好是坏？
---------------

到这里，我判断一下，到底谁是正确的。

systemd最初的想法是非常好的。Linux需要一个新的东西来替换老的 SysV init 和沉重的 SysV init 脚本，这个新的程序应该是灵活的，现代化的系统守护进程，它可以响应更多类型，并且智能化的管理众多的守护进程。然而，事实上systemd好像成为了**一个仅依赖Linux核心的完全统一的系统层**。

*但是*，尽管Linux是一个社区开发项目，但它不是为PC世界的专栏作家或者是一群网络评论者提供的，这些人都不能决定它的进化与发展。只有那些亲手贡献代码以及全身心投入的人才有这个资格。巧的是，Linux发行版以及那些参与者好像大部分都倾向与systemd。

>
> '我对于systemd本身并没有很强烈的个人看法。我与核心开发人员争论过它的bug与兼容性，并且我认为它的一些设计是愚蠢的（比如二进制的日志），但这只是细节，不是大问题。
>
>
>

如果 Linus Torvalds 对于systemd的设计没有什么反对意见，那么说明它可能还是不错的。如果你想平静的看下为什么Linux发行版要使用systemd的话，我推荐这篇文章，[Debian's systemd discussion document](http://www.markshuttleworth.com/archives/1295)。

你是如何看systemd的，可以在评论回复！但是请文明讨论。

*更新这篇文章以澄清之前的错误的消息，ubuntu 桌面版将在下一个版本中纳入systemd。之前我们错误的认为ubuntu已经使用了systemd*。

---

via: <http://www.pcworld.com/article/2841873/meet-systemd-the-controversial-project-taking-over-a-linux-distro-near-you.html>

作者：[Chris Hoffman](http://www.pcworld.com/article/2841873/meet-systemd-the-controversial-project-taking-over-a-linux-distro-near-you.html#chrishoffman) 译者：[SPccman](https://github.com/SPccman) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


安卓编年史（4）：Android 0.9 Beta——嘿，这看起来很眼熟！

[赞]

还是5.0犀利，art技术。

安卓0.9。。

好老啊

# 安卓编年史（4）：Android 0.9 Beta——嘿，这看起来很眼熟！

*安卓 0.9 显示着横屏的主屏幕——后续一些版本无法实现的一个特性 [Ron Amadeo供图]*

尽管从功能上很难将模拟器和操作系统区分开，但安卓 0.9 是第一个支持横屏显示的版本。更让人惊讶的是，几乎所有东西都支持横屏模式，在某些方面安卓 0.9 甚至做的比 KitKat 更好。在 Kiakat 中，主屏幕和拨号被锁定为竖向并且无法旋转。但在安卓 0.9 这里，对任何一个应用横向显示都不是问题。（有谁知道怎么把 Nexus 5 从 Kitkat 升/降级到安卓 0.9 吗？）

截图同样显示了安卓 0.9 中的新的音量显示设计。它抛弃了在 Milestone 3 中初次登场的旧铃铛式控制界面。那是一个巨大的，充满屏幕的界面。实际上，安卓 4.0 的重新设计中让它变得更小了，但它仍然是个问题。（你想增加音量却因此没法看到视频了这种情况特别烦人。）

*新通知面板，抛弃了应用快捷方式并添加了顶部部分 [Ron Amadeo供图]*

几乎每个安卓版本中的通知面板都有一定的调整，安卓 0.9 也不例外。电池电量图标进行了重绘，变成了黑底绿色图标，其它的状态栏图标变为黑色，白色以及灰色。状态栏左侧部分明智地选择在通知面板打开的时候显示日期。

通知面板加入了一个新的顶部部分，它能够显示运营商名称（在模拟器里显示“安卓”），以及一个巨大的写着“清除通知”的按钮，它能够让你不用打开应用而彻底清除通知。应用程序图标被取消了，替换为通知到达的时间，“最新事件”文字被更换为简单的“通知”。面板的空白部分现在是灰色的而不是之前的白色，底部的滑动条也进行了重新设计。上面两张图片的底部看起来并没有对齐，但这是因为 Milestone 5 的通知面板在面板底部有一圈空白。安卓 0.9 的通知面板是完全直达底部边缘的。

*安卓 0.9 和 0.5 的浏览器，展现出新的无色彩菜单 [Ron Amadeo供图]*

浏览器主页现在是加载一个真正的网站，而不是像 Milestone 5 中那样的本地存储的假 Google 页面。Webkit 的版本升至 525.10，但是看起来它似乎没法正确渲染更现代的 Google.com 搜索按钮。纵观安卓 0.9，Milestone 5 中的菜单设计已经被抛弃，取而代之的是重新设计的灰色图标。这些截图的区别十分的明显，因为所有的颜色都被去除了。

“更趋向于”列表式的菜单变得更高了一点，并且只是一个没有图标的列表而已。安卓 0.9 已经获得了其它搜索方式，这次是在浏览器菜单里。和主屏幕小部件，主屏幕菜单按钮，以及浏览器主页，它们共同组成了四个搜索框。谷歌从未隐藏它的主要业务是什么，就连在它的操作系统中也是这样。

*从左到右：安卓 0.9 的浏览器缩放控件，页面内搜索界面，浏览器窗口，以及设置 [Ron Amadeo供图]*

安卓 0.9 带来了许多浏览器改进。谢天谢地缩放控件又能正常使用了，而且从疯狂的垂直控制变成了简单的加减按钮。谷歌做了个符合常识的决定，将缩放控制从屏幕中间移到了屏幕底部。在这些缩放控件中，安卓在一致性方面的努力显而易见。这些看起来是系统中唯一的圆形按钮。

安卓 0.9 中的新特性“页面内查找”会高亮显示页面内的关键词。但总的来说，UI 还是十分粗糙的——文本框比它应有的高度高了许多，“完成”按钮带的勾选框对这个页面来说只是一种图标而已。“完成”基本上是个“关闭”按钮，这意味着它也许应该是个右对齐的“X”按钮。

这个版本的系统没有设置界面，但是浏览器最终还是有了自己的设置界面。它会有个桌面式选项的弹窗，Javascript，隐私和 cookie，保存的密码以及表单数据。甚至还有 Google Gears 整合（还记得 Google Gears 吗？）。

*拨号盘以及打开菜单的正在通话界面 [Ron Amadeo供图]*

拨号和联系人在安卓0.9中实际上是同一个应用——两个图标只是打开不同的标签而已。将联系人像这样附到拨号盘表明了智能手机联系人的第一目的还是通话，不是短信，电子邮件，即时通讯或查找地址。最终谷歌还是会完全接受非传统的智能手机沟通，将联系人和拨号分为两个独立的应用程序。

Milestone 5中大多数拨号盘的缺陷在安卓0.9中得到了修复。“最小化”标签被一组正常的亮/暗标签替代。对话气泡式的退格键被替换为正常的退格图标并集成到了拨号数字显示界面。数字键变成了圆形，尽管这个系统的其它东西是圆角矩形的（至少这次文本是垂直对齐的）。谷歌还修复了Milestone 5中“-”键，“\*”键和“#”键不平衡的问题。

在安卓0.9中点击显示的号码会开始一个通话。这是十分重要的，因为这是摆脱安卓设备硬件实体“拨号”和“结束”键的一大步。另一方面，来电界面却走的是完全相反的道路，去除了在安卓0.5中显示于屏幕之上的“接听”和“拒绝”按键。谷歌会花上接下来几个版本的时间去摸索在特定的显示之下是否需要硬件实体拨号键。但是直到安卓2.0和摩托罗拉Droid面世，实体拨号按钮才最终变成了可选选项。

来电界面的所有选项隐藏在目录按钮之后。Milestone 5不支持距离传感器，所以它采取了简单粗暴的路线，在通话过程中禁用触摸屏。安卓0.9为G1开发，它有个距离传感器。最终谷歌没有在通话的时候禁用触摸传感器。

*安卓 0.9 和 0.5 中独立的联系人界面和联系人编缉界面 [Ron Amadeo供图]*

Milestone 5 的一些联系人信息有令人困惑的标签，像电子邮件只被打上“主要的”标签而不是“主电子邮箱”标签。安卓 0.9 用各部分的水平标题纠正了这个错误。而且现在左侧的每个联系人类型都有了<ruby> 手形图标 <rp>  （ </rp> <rt>  Action icons </rt> <rp>  ） </rp></ruby>。

编缉联系人界面如今是个更加繁忙的地方。每个输入框都有删除按钮，特定联系人铃声，一个显示在屏幕上的“更多信息”按钮用来添加输入框，一个是否将通话直接发送到语音信箱的复选框，以及在列表底部的“保存”和“放弃修改”按钮。从功能上来说，相对于旧版本这是个巨大的进步，但它看起来仍然很混乱。

---

[Ron Amadeo](http://arstechnica.com/author/ronamadeo) / Ron 是Ars Technica的评论编缉，专注于安卓系统和谷歌产品。他总是在追寻新鲜事物，还喜欢拆解事物看看它们到底是怎么运作的。[@RonAmadeo](https://twitter.com/RonAmadeo)

---

via: <http://arstechnica.com/gadgets/2014/06/building-android-a-40000-word-history-of-googles-mobile-os/4/>

译者：[alim0x](https://github.com/alim0x) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


如何在 CentOS 7 上安装 Docker

Summary: Docker 是一个开源工具，它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机，并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序，并且可以扩展到成千上万的节点。 容器和 VM（虚拟机）的主要区别是，容器提供了基于进程的隔离，而虚拟机提供了资源的完全隔离。虚拟机可能需要一分钟来启动，而容器只需要一秒钟或更短。容器使用宿主操作系统的内核，而虚拟机使用独立的内核。 Docker 的局限性之一是，它只能用在 64 位的操作系统上。  在这篇文章中我们将讨论如何在 CentOS 7.x 中

好用的Docker！

正在学习

@马全一 谢谢您的镜像~~

自带的版本太低了

[嘻嘻]

安装应该是yum -y install docker-io

并且要卸载掉前面安装的docker #yum remove docker

建议看看docker官方文档

您说的安装 docker-io 应该是 CentOS 6的情况，在 CentOS 7上，Docker 已经正式收录到CentOS-Extras 库内，名字已经是 docker 了。

请问Docker怎么改源

好评！！实用。板书很不错

好评！！实用。板书很不错

好评！！实用。板书很不错

好评！！实用。板书很不错

实用，板书不错

实用，板书不错

实用，板书不错

实用，板书不错

可以的·

# 如何在 CentOS 7 上安装 Docker

Docker 是一个开源工具，它可以让创建和管理 **Linux 容器**变得简单。容器就像是轻量级的虚拟机，并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序，并且可以扩展到成千上万的节点。

容器和 VM（虚拟机）的主要区别是，容器提供了**基于进程的隔离**，而虚拟机提供了资源的完全隔离。虚拟机可能需要一分钟来启动，而容器只需要一秒钟或更短。容器使用宿主操作系统的内核，而虚拟机使用独立的内核。

Docker 的局限性之一是，它只能用在 **64 位**的操作系统上。

在这篇文章中我们将讨论如何在 CentOS 7.x 中安装 docker。

### CentOS 7 中 Docker 的安装

Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker，只需要运行下面的 yum 命令：

```
[root@localhost ~]# yum install docker

```

### 启动 Docker 服务

安装完成后，使用下面的命令来启动 docker 服务，并将其设置为开机启动：

```
[root@localhost ~]# service docker start
[root@localhost ~]# chkconfig docker on

```

（LCTT 译注：此处采用了旧式的 sysv 语法，如采用CentOS 7中支持的新式 systemd 语法，如下：

```
[root@localhost ~]# systemctl  start docker.service
[root@localhost ~]# systemctl  enable docker.service

```

）

**下载官方的 CentOS 镜像到本地** （LCTT 译注：由于 Docker 被**墙** :-< ，所以请使用 <http://docker.cn> 的[镜像](https://docker.cn/h/how-to-use-docker-official-repositories)，感谢 [@马全一](http://weibo.com/genedna) 的镜像。 ）

```
[root@localhost ~]# docker pull centos
Pulling repository centos
192178b11d36: Download complete
70441cac1ed5: Download complete
ae0c2d0bdc10: Download complete
511136ea3c5a: Download complete
5b12ef8fd570: Download complete

```

**确认 CentOS 镜像已经被获取：**

```
[root@localhost ~]# docker images centos
REPOSITORY    TAG          IMAGE ID      CREATED       VIRTUAL SIZE
centos        centos5      192178b11d36  2 weeks ago   466.9 MB
centos        centos6      70441cac1ed5  2 weeks ago   215.8 MB
centos        centos7      ae0c2d0bdc10  2 weeks ago   224 MB
centos        latest       ae0c2d0bdc10  2 weeks ago   224 MB

```

**运行一个 Docker 容器：**

```
[root@localhost ~]# docker run -i -t centos /bin/bash
[root@dbf66395436d /]#

```

我们可以看到，CentOS 容器已经被启动，并且我们得到了 bash 提示符。在 docker 命令中我们使用了 “-i 捕获标准输入输出”和 “-t 分配一个终端或控制台”选项。若要断开与容器的连接，输入 exit。

```
[root@cd05639b3f5c /]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
[root@cd05639b3f5c /]# exit
exit
[root@localhost ~]#

```

我们还可以搜索基于 Fedora 和 Ubuntu 操作系统的容器。

```
[root@localhost ~]# docker search ubuntu
[root@localhost ~]# docker search fedora

```

**显示当前正在运行容器的列表**

---

via: <http://www.linuxtechi.com/install-docker-on-centos-7/>

作者：[Pradeep Kumar](http://www.linuxtechi.com/author/pradeep/) 译者：[felixonmars](https://github.com/felixonmars) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


系统之锹sysdig：Linux服务器监控和排障利器

Summary: 当你需要追踪某个进程产生和接收的系统调用时，首先浮现在你脑海中的是什么？你可能会想到strace，那么你是对的。你会使用什么样的命令行工具来监控原始网络通信呢？如果你想到了tcpdump，你又作出了一个极佳的选择。而如果你碰到必须追踪打开的文件（在Unix意义上：一切皆文件）的需求，可能你会使用lsof。 strace、tcpdump以及lsof，确实是些伟大的工具，它们应该成为每个系统管理员工具集之中的一部分，而这也正是你为什么应该爱上sysdig的原因。它是一个强大的开源工具，用于系统级别的勘察和排障，它的创建者在介绍它时称之为strace+

//@lidaobing:转发微博

@我的印象笔记

保存学习//@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

Repost

[太开心] //@-神仙-: //@lidaobing:转发微博

非常棒的一个工具 //@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

sysdig//@Linux中国: 它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

是个好东西

@我的印象笔记  //@归文胜://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

MA

仅仅是整合了一下子吗

嗯  //@王关胜://@归文胜://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

@mywiz

看看

这工具很不错，收藏！

系统工具@我的印象笔记

马克//@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

cool //@易到用车王柏://@mylua: //@王关胜://@归文胜://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

收藏 //@fengyuncrawl:这工具很不错，收藏！

试试//@宋超_去哪儿呢: //@3rddayFPA:  //@KissDev:Cool tool //@mylua: //@王关胜://@归文胜://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

真心高级了：）

马一下//@马全一: //@sunbiao将军://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

好东西 //@iSunshow://@周明智:收藏 //@fengyuncrawl:这工具很不错，收藏！

@我的印象笔记

//@fengyuncrawl:这工具很不错，收藏！

mark //@fengyuncrawl:这工具很不错，收藏！

@我的印象笔记

//@来炜没睡醒:真心高级了：）

//@-神仙-: //@lidaobing:转发微博

@Linuxyunwei

//@ASTA谢: //@-神仙-: //@lidaobing:转发微博

收藏

@我的印象笔记

@我的印象笔记

//@ASTA谢: //@-神仙-: //@lidaobing:转发微博

@我的印象笔记 //@n4mine: //@ASTA谢: //@-神仙-: //@lidaobing:转发微博

//@ASTA谢: //@-神仙-: //@lidaobing:转发微博

@我的印象笔记

回头研究一下

mark//@ruochen_SH: @热情萧远山 @kykij @cjfeii //@KissDev:Cool tool //@mylua: //@王关胜://@归文胜://@Linux中国:它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”

//@-浩泓-:转发微博

@我的印象笔记

m//@n4mine: //@ASTA谢: //@-神仙-: //@lidaobing:转发微博

@我的印象笔记

@我的印象笔记 //@团团爱荛六://@lidaobing：转发微博

@我的印象笔记

不错不错

@胶布虫 @___枫恋寒

学习了

# 系统之锹sysdig：Linux服务器监控和排障利器

当你需要追踪某个进程产生和接收的系统调用时，首先浮现在你脑海中的是什么？你可能会想到strace，那么你是对的。你会使用什么样的命令行工具来监控原始网络通信呢？如果你想到了tcpdump，你又作出了一个极佳的选择。而如果你碰到必须追踪打开的文件（在Unix意义上：一切皆文件）的需求，可能你会使用lsof。

strace、tcpdump以及lsof，确实是些伟大的工具，它们应该成为每个系统管理员工具集之中的一部分，而这也正是你为什么应该爱上[sysdig](http://www.sysdig.org/)的原因。它是一个强大的开源工具，用于系统级别的勘察和排障，它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”。抛开幽默不说，sysdig的最棒特性之一在于，它不仅能分析Linux系统的“现场”状态，也能将该状态保存为转储文件以供离线检查。更重要的是，你可以自定义sysdig的行为，或者甚至通过内建的（你也可以自己编写）名为凿子（chisel）的小脚本增强其功能。单独的凿子可以以脚本指定的各种风格分析sysdig捕获的事件流。

在本教程中，我们将探索sysdig的安装及其基本用法，在Linux上实施系统监控和排障。

### 安装Sysdig

对于本教程，由于为了简便、缩短安装流程以及版本的不可知，我们将选择使用官方网站提供的自动化安装过程。在自动化过程中，安装脚本会自动检测操作系统并安装必需的依赖包。

以root身份运行以下命令来从官方apt/yum仓库安装sysdig：

```
# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash

```

安装完成后，我们可以通过以下方法调用sysdig来感受一下它：

```
# sysdig

```

我们的屏幕将马上被系统上发生的所有事件填满，对于这些信息，不便于我们做更多操作。要进一步处理，我们可以运行：

```
# sysdig -cl | less

```

来查看可用的凿子列表。

默认有以下类目可用，各个类目中分布有多个内建的凿子。

* CPU Usage：CPU使用量
* Errors：错误
* I/O
* Logs：日志
* Misc：混杂
* Net：网络
* Performance：性能
* Security：安全
* System State：系统状态

要显示指定凿子上的信息（包括详细的命令行用法），运行以下命令：

```
# sysdig -cl [凿子名称]

```

例如，我们可以检查“网络”类目下关于spy\_port凿子的信息：

```
# sysdig -i spy_port

```

凿子可以通过过滤器（可同时应用于实时数据和记录文件）组合，以获取更多有用的输出。

过滤器遵从“类.字段”结构。例如：

* **fd.cip**：客户端IP地址。
* **evt.dir**：事件方向，可以是‘>’用于进入事件，或‘<’用于退出事件。

完整的过滤器列表可以通过以下命令显示：

```
# sysdig -l

```

在本教程剩余部分，我将演示几个sysdig的使用案例。

### Sysdig实例： 服务器性能排障

假定你的服务器发生了性能问题（如，没有回应，或者重大的回应延迟）。你可以使用瓶颈凿子来显示当前10个最慢系统调用的列表。

使用以下命令在存活服务器上进行实时检查。“-c”标识，后跟凿子名称告诉sysdig运行指定的凿子。

```
# sysdig -c bottlenecks

```

或者，你可以离线对服务器实施性能分析。在此种情况下，你可以保存完整的sysdig记录到文件，然后像下面这样针对记录运行瓶颈凿子。

首先，保存sysdige记录（使用Ctrl+c来停止收集）：

```
# sysdig -w trace.scap

```

收集完记录后，你可以运行以下命令来检查捕获间隔中最慢的系统调用：

```
# sysdig -r trace.scap -c bottlenecks

```

你需要关注栏#2，#3和#4，这些分别表示执行时间、进程名和PID。

### Sysdig实例： 监控交互用户活动

假定你作为系统管理员想要监控系统中交互的用户活动（如，用户在命令行输入了什么命令，以及用户去了什么目录），这时spy\_user凿子就派上用场了。

让我们首先通过一些额外选项来收集一个sysdig记录。

```
# sysdig -s 4096 -z -w /mnt/sysdig/$(hostname).scap.gz

```

* “-s 4096”告诉sysdig每个事件捕获4096字节。
* “-z” （与“-w”一起使用）为记录文件启用压缩。
* “-w ”保存sysdig记录到指定的文件。

在上面的例子中，我们自定义了基于每个主机的压缩的记录文件的名称。记住，你可以在任何时候按下Ctrl+c来打断sysdig的执行。

在我们收集到了合理数量的数据后，我们可以通过运行以下命令来查看每个用户的交互活动：

```
# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users

```

上面输出的第一栏表示与指定用户的活动相关进程的PID。

如果你想要定位一个指定的用户，以及只监控该用户的活动又怎么样呢？你可以通过用户名对spy\_users凿子的结果进行过滤：

```
# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users "user.name=xmodulo"

```

### Sysdig实例： 监控文件I/O

我们可以使用“-p”标识来自定义sysdig记录的输出格式，并指定双引号括起来的想要的字段（如用户名、进程名，以及文件或套接口名称）。在本例中，我们将创建一个记录文件，该文件将只包含在家目录中的写入事件（我们今后可以使用“sysdig -r writetrace.scap.gz”来检测该文件）。

```
# sysdig -p "%user.name %proc.name %fd.name" "evt.type=write and fd.name contains /home/" -z -w writetrace.scap.gz

```

### Sysdig实例： 监控网络I/O

作为服务器排障的一部分，你可能想要监听网络通信，此工作通常由tcpdump做。对于sysdig，可以很容易进行通信嗅探，其风格更为对用户友好。

例如，你可以检查由特定IP地址，特定进程（如apache2）提供的数据（ASCII编码格式）：

```
# sysdig -s 4096 -A -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2

```

如果你想要监控原生数据传输（二进制格式），请把“-A”替换为“-X”：

```
# sysdig -s 4096 -X -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2

```

要获取更多信息、实例以及案例分析，你可以查阅[项目网站](http://www.sysdig.org/)。相信我，会有着无限可能，但请不要仅仅局限于我所写的这些。安装sysdig，请从今天开始深入挖掘吧！

---

via: <http://xmodulo.com/monitor-troubleshoot-linux-server-sysdig.html>

作者：[Gabriel Cánepa](http://xmodulo.com/author/gabriel) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


20个关于Postfix的面试题

Summary: 问题1：什么是 Postfix，它的默认端口是多少？ 答：Postfix 是一个开源的 MTA（邮件传送代理，英文名：Mail Transfer Agent）,用于转发 email。相信很多人知道 Sendmail，而 Postfix 是它的替代品。默认端口是25。 问题2：Postfix 和 Sendmail 有什么区别？ 答：Postfix 使用模块化设计，由多个独立的可执行程序组成；而 Sendmail 被设计成有一个强大的后台进程提供所有服务。 问题3：什么是 MTA，它在邮件系统中扮演什么角色？ 答：MTA 是 Mail Transfer Agent （邮件传输代理）的缩写。MTA 负责接收和发送邮件、确定发送路径和地址重写

都是很基本的…

除了第一个，其他都不会了。

还可以.

邮件的知识都快忘光了[衰]

Mark

@我的印象笔记

mark

@我的印象笔记

# 20个关于Postfix的面试题

<img src="content_image/album_201412_01_201220h2vh2vvisw43cttt.jpg" alt="" title="">

### 问题1：什么是 Postfix，它的默认端口是多少？

答：Postfix 是一个开源的 MTA（邮件传送代理，英文名：Mail Transfer Agent）,用于转发 email。相信很多人知道 Sendmail，而 Postfix 是它的替代品。默认端口是25。

### 问题2：Postfix 和 Sendmail 有什么区别？

答：Postfix 使用模块化设计，由多个独立的可执行程序组成；而 Sendmail 被设计成有一个强大的后台进程提供所有服务。

### 问题3：什么是 MTA，它在邮件系统中扮演什么角色？

答：MTA 是 Mail Transfer Agent （邮件传输代理）的缩写。MTA 负责接收和发送邮件、确定发送路径和地址重写（LCTT译注：address rewriting，就是完善发送地址，比如将“username”这个地址重写为“[username@example.com](mailto:username@example.com)”）。本地转发就是将邮件发送给 MDA。Qmail、Postix、Sendmail 都是 MTA。

### 问题4：什么是 MDA？

答：MDA 是 Mail Delivery Agent （邮件投递代理）的缩写。MDA 这个程序用于从 MTA 获取邮件并投递至本地收件人的邮箱。MDA 通常可以过滤邮件或为邮件分类。一个 MDA 也能决定一封邮件是否需要转发到另一个邮箱地址。Procmail 就是一个 MDA。

### 问题5：什么是 MUA？

答：MUA 是 Mail User Agent （邮件用户代理）的缩写。MUA 是一个邮件客户端软件，可以用来写邮件、发送邮件、接收邮件。发送邮件时使用的是 MTA；接收邮件时可以从邮件存储区直接收取，也可以通过 POP/IMAP 服务器间接收取。Outlook、Thunkerbird、Evolution 都是 MUA。

### 问题6：邮件服务器里 postmaster 的作用是什么？

答：邮件管理者一般就是 postmaster。一个 postmaster 的责任就是保证邮件系统正常工作、更新系统配置、添加/删除邮箱帐号，以及其他工作。每个域中必须存在一个 postmaster 的别名（LCTT译注：postmaster 别名用于接受一些其它服务器/用户对该邮件系统的沟通邮件，如关于垃圾邮件拒收的投诉等，通常都会直接被邮件服务器的管理员所接受。一些系统错误和提示的邮件，也往往以postmaster 作为发件人），用于将邮件发往正确的用户。

### 问题7：Postfix 都有些什么重要的进程？

答：以下是 Postfix 邮件系统里最重要的后台进程列表：

* **master**：这条进程是 Postfix 邮件系统的大脑，它产生所有其他进程。
* **smtpd**：作为服务器端程序处理所有外部连进来的请求。
* **smtp**：作为客户端程序处理所有对外发起连接的请求。
* **qmgr**：它是 Postfix 邮件系统的心脏，处理和控制邮件队列里面的所有消息。
* **local**：这是 Postfix 自有的本地投递代理MDA，就是它负责把邮件保存到邮箱里。

### 问题8：Postfix 服务器的配置文件是什么？

答：有两个主要配置文件：

* **/etc/postfix/main.cf**：这个文件保存全局配置信息，所有进程都会用到，除非这些配置在 master.cf 文件中被重新设置了。
* **/etc/postfix/master.cf**：这个文件保存了额外的进程运行时环境参数，在 main.cf 文件中定义的配置可能会被本文件的配置覆盖掉。

### 问题9：如何将 Postfix 重启以及设为开机启动？

答：使用这个命令重启：service postfix restart；使用这个命令设为开机启动：chkconfig postfix on

### 问题10：怎么查看 Postfix 的邮件队列？

答：Postfix 维护两个队列：未决邮件队列（pending mails queue）和等待邮件队列（deferred mail queue）。等待队列包含了暂时发送失败、需要重新发送的邮件，Postfix 会定期重发（默认5分钟，可自定义设置）。（LCTT译注：其实 Postfix 维护5个队列：输入队列，邮件进入 Postfix 系统的第一站；活动队列，qmgr 将输入队列的邮件移到活动队列；等待队列，保存暂时不能发送出去的邮件；故障队列，保存受损或无法解读的邮件；保留队列，将邮件无限期留在 Postfix 队列系统中。）

列出邮件队列里面所有邮件：

```
# postqueue -p

```

保存邮件队列名单：

```
# postqueue -p > /mnt/queue-backup.txt

```

让 Postfix 马上处理队列：

```
# postqueue -f

```

### 问题11：如何删除邮件队列里面的邮件？

答：以下命令删除所有邮件：

```
# postsuper -d ALL

```

以下命令只删除等待队列中的邮件：

```
# postsuper -d ALL deferred

```

### 问题12：如何通过命令来检查 Postfix 配置信息？

答：使用postconf -n命令可以查看，它会过滤掉配置文件里面被注释掉的配置信息。

### 问题13：实时查看邮件日志要用什么命令？

答：

```
tail -f /var/log/maillog 或 tailf /var/log/maillog
```

### 问题14：如何通过命令行发送测试邮件？

答：参考下面的命令：

```
# echo "Test mail from postfix" | mail -s "Plz ignore" info@something.com

```

### 问题15：什么是“开放邮件转发（Open Relay）”？

答：开放邮件转发是 SMTP 服务器的一项设定，允许因特网上任意的其他用户能通过该服务器转发邮件，而不是直接发送到某个帐号的服务器或只允许授权用户通过它来发送邮件。过去，这项功能在许多邮件服务器中都是默认开启的，但是现在已经不再流行了，因为邮件转发会导致大量垃圾邮件和病毒邮件在网络上肆虐。

### 问题16：什么是 Postfix 上的邮件转发主机？

答：转发主机是 SMTP 的地址，如果在配置文件中有配置，那么所有输入邮件都将被 SMTP 服务器转发。

### 问题17：什么是灰名单？

答：灰名单（LCTT译注：介于白名单和黑名单之间）是一种用于拦截垃圾邮件的技术。一个 MTA 使用灰名单时就会“暂时拒绝”未被识别的发送者发来的所有邮件。如果邮件是正当合理的，发起者会在一段时间后重新发送，然后这份邮件就能被接收。（LCTT译注：灰名单基于这样一个事实，就是大多数的垃圾邮件服务器和僵尸网络的邮件只发送一次，而会忽略要求它们在一定的时间间隔后再次发送的请求。）

### 问题18：邮件系统中 SPF 记录有什么重要作用？

答：SPF 是 Sender Policy Framework 的缩写，用于帮助邮件域的拥有者确认发送方是否来自他们的域，目的是其他邮件系统能够保证发送方在发送邮件时来自经过授权的来源 —— 这种方法可以减小遇到邮件地址欺骗、网络钓鱼和垃圾邮件的风险。

### 问题19：邮件系统中 DKIM 有什么用处？

答：域名密匙是一套电子邮件身份认证系统，用于验证邮件发送方的 DNS 域和邮件的完整性。域名密匙规范采用互联网电子邮件认证技术，建立了一套加强版协议：域名密匙识别邮件（就是 DKIM）。

### 问题20：邮件系统中 ASSP 的规则是什么？

答：ASSP(Anti-Spam SMTP Proxy，反垃圾代理) 是一个网关服务器，安装在你的 MTA 前面，通过自建白名单、自动学习贝叶斯算法、灰名单、DNS 黑名单（DNSBL）、DNS 白名单（DNSWL）、URI黑名单（URIBL）、SPF、SRS、Backscatter、病毒扫描功能、附件阻拦功能、基于发送方等多种方法来反垃圾邮件。

---

via: <http://www.linuxtechi.com/postfix-interview-questions-answers/>

作者：[Pradeep Kumar](http://www.linuxtechi.com/author/pradeep/) 译者：[bazz2](https://github.com/bazz2) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


Linux系统管理员的命令行工具箱目录

Summary: 系统管理员（sysadmins）负责日常维护生产系统和服务。其中一个关键任务就是保证功能性服务能24小时工作。为了这个，他们得很小心地计划备份方式，灾难管理策略，定时维护，安全审查，等等。和任意其他管理一样，系统管理员也有他们的必备工具。在正确的时间正确的情况下使用合适的工具，可以帮助维护操作系统的健壮，达到最小的服务中断时间和最大的运行时间。  这篇文章会介绍一些系统管理员日常活动中最常用和有效的命令行工具。如果你想推荐其他没在这里列出来的好用的工具，别忘了在评论区里分享一下。 网络工具   ping：通过ICMP回

挺好的。“效率工具”我就只认识一个screen还不熟练，难道这就是我没效率的原因？

Repost

@我的印象笔记

看看

Repost @根据相关政策法律该名称不予显示

转起

@有道云笔记收藏

@有道云笔记收藏

@我的印象笔记

@我的印象笔记

@我的印象笔记

大赞！

phpping应该是hping吧

对不起，是笔误，马上修改。

@我的印象笔记

# Linux系统管理员的命令行工具箱目录

系统管理员（sysadmins）负责日常维护生产系统和服务。其中一个关键任务就是保证功能性服务能24小时工作。为了这个，他们得很小心地计划备份方式，灾难管理策略，定时维护，安全审查，等等。和任意其他管理一样，系统管理员也有他们的必备工具。在正确的时间正确的情况下使用合适的工具，可以帮助维护操作系统的健壮，达到最小的服务中断时间和最大的运行时间。

<img src="content_image/album_201412_01_203727i8skuaqv448pbjxf.jpg" alt="" title="">

这篇文章会介绍一些系统管理员日常活动中最常用和有效的命令行工具。如果你想推荐其他没在这里列出来的好用的工具，别忘了在评论区里分享一下。

### 网络工具

1. **ping**：通过ICMP回应/回复报文来检查远端主机的端到端连接性（RTT延时，抖动，丢包）。用来检查系统状态和可连接性很不错。
2. **[hping](http://www.hping.org/)**：网络扫描和检测工具，可以产生ICMP/TCP/UDP ping数据包。常常用于高级端口扫描，防火墙测试，手动MTU路径发现和碎片测试。
3. **traceroute**：通过TTL限定的ICMP/UDP/TCP侦测包来发现从本地主机到远端目标主机之间的第三层转发路径。用来调试网络连接性和路由问题。
4. **mtr**：traceroute的一个变种，能根据运行时统计数据整理出每一跳的包丢失/抖动。用来评估路由路径延时很不错。
5. **[netcat](http://netcat.sourceforge.net/)/[socat](http://www.dest-unreach.org/socat/)**：TCP/IP网络里的瑞士军刀，可以读/写 TCP/UDP 协议字节流。用来调试防火墙策略和服务可用性很不错。
6. **dig**：DNS调试工具，可以生成正向查询，反向查询，搜索域名服务器，检查CNAME，MX和其他DNS记录。可以在侦错的时候查询特定的DNS服务器。
7. **nslookup**：另外一个DNS检查/调试工具。支持所有DNS查询和记录。可以查询特定DNS服务器。
8. **dnsyo**：一个DNS测试工具，通过对全世界1500个不同网络中的大量开放解析器执行DNS查询来测试DNS传输。
9. **lsof**：显示进程打开的文件信息（例如，普通文件，管道或套接字）。用来监视网络连接很不错。
10. **iftop**：一个基于ncurses的命令行界面应用，可以实时监视各个网络物理接口上的网络连接和带宽占用。用来记录霸占带宽的应用、用户、目的地和端口等很不错。
11. **netstat**：一个网络统计工具，可以显示状态以及统计信息，当前网络连接（TCP/UDP端口，IP地址）、路由表、TX/RX traffic以及网络协议。用来做网络相关诊断和性能调试很不错。
12. **[tcpdump](http://www.tcpdump.org/)**：一个常用的基于libpcap抓包库的包侦测工具。可以按伯克利包过滤器格式定义抓包条件。
13. **[tshark](https://www.wireshark.org/docs/man-pages/tshark.html)**：另一个命令行抓包工具，和它的GUI版本Wireshark完全兼容。支持[1000种协议](https://www.wireshark.org/docs/dfref/)而且这个列表还在增加。用来调试、分析和保存实时网络封包信息很不错。
14. **ip**：一个多功能的命令行网络工具，是iproute2包的一部分。可以检查和修改路由表、网络设备状态以及IP隧道设置。用来查看路由表、增加/删除静态路由、配置网络接口、以及调试路由问题很有用。
15. **ifup/ifdown**：用来激活和关闭特定的网络接口。经常用于重启整个网络服务。
16. **[autossh](http://www.harding.motd.ca/autossh/)**：一个能建立SSH连接并在断线后自动重新连接的程序。用来创建长时间保持的穿越严格企业网络的SSH隧道很有用。
17. **iperf**：一个网络测试工具，通过在发送自定义TCP/UDP数据流来衡量主机间双向最大吞吐量。
18. **[elinks](http://elinks.or.cz/)/[lynx](http://lynx.isc.org/)**：为基于命令行的服务器环境下使用的基于文字的网页浏览器。

### 安全工具

1. **[iptables](http://www.netfilter.org/projects/iptables/)**：一个用户空间下的命令行工具，用于配置Linux内核防火墙。可以创建和修改Linux内核空间的网络包接收、转发和发送规则。
2. **[nmap](http://nmap.org/)**：一个常用的为了安全审查目的的端口扫描和网络发现工具。用来在本地网络中找出哪些主机开机并运行起来了以及某台特定主机打开了哪些端口很有用。
3. **[TCP Wrappers](http://en.wikipedia.org/wiki/TCP_Wrapper)**：一个主机端的网络访问控制列表工具，可以过滤进入/出去的网络请求/回复。经常配合iptables一起使用，作为额外一层安全保护。
4. **getfacl/setfacl**：查看和定制文件和目录的访问控制列表，作为传统文件权限的扩展。
5. **cryptsetup**：用于创建和管理LUKS加密磁盘分区。
6. **lynis**：一个命令行的漏洞扫描工具。可以扫描整个Linux系统，并汇报潜在的漏洞以及相关可能解决方案。
7. **maldet**：一个恶意软件扫描命令行工具，可以检测和隔离潜在的感染文件。可以在后台运行长期监视。
8. **[rkhunter](http://rkhunter.sourceforge.net/)/[chkrootkit](http://www.chkrootkit.org/)**：一个命令行工具，可以扫描本地系统里的潜在木马、隐藏后门和可疑利用，并禁用它们。

### 存储工具

1. **fdisk**：一个磁盘分区编辑工具。用于查看、创建和修改本地磁盘或可移动磁盘的分区。
2. **sfdisk**：fdisk的一个变种，能用一种非交互的方式访问或更新磁盘分区表。用来自动化备份和恢复过程中的磁盘分区很有用。
3. **[parted](http://www.gnu.org/software/parted/)**：另一个磁盘分区编辑器，支持超过2TB的磁盘的GPT（GUID分区表）格式。gparted是parted的一个前端GTK+图形界面。
4. **df**：用来查看不同分区或文件路径的已用/可用存储空间和挂载点。还有一个更易用的变种dfc。
5. **du**：用来查看不同文件和目录的当前磁盘占用情况（例如，du -sh \*）。
6. **mkfs**：一个磁盘格式化命令，用来在独立磁盘分区上建立文件系统。有多个文件系统相关的版本：ext2、ext3、ext4、bfs、ntfs、vfat/fat。
7. **fsck**：一个命令行工具，用来检查文件系统错误并尝试可能的修复。通常在启动时自动运行，但是在卸载一个分区后也可以根据需要手动运行。
8. **mount**：用来映射一个物理磁盘分区、网络共享或远程存储到一个本地挂载点。任何对挂载点里的读/写操作都是对应实际存储的实际数据读/写。
9. **mdadm**：一个命令行工具，用来管理物理块设备上的软件RAID设备。可以创建、构造、增长或监视RAID阵列。
10. **lvm**：一套命令行工具集，用来管理卷分组和物理/逻辑卷，可以用最小的停机时间在多个物理磁盘上创建、调整大小、拆分和合并卷。

### 日志访问工具

1. **tail**：用来查看一个（增长中的）日志文件的尾部。有几个变种，包括multitail（多窗口查看）和[ztail](https://hackage.haskell.org/package/ztail)（支持inotify和正则表达式过滤以及颜色）。
2. **logrotate**：一个命令行工具，可以在根据设定的时间段拆分、压缩并通过邮件发送旧的/大的日志文件。用来管理可能产生大量日志文件的繁忙主机很有用。
3. **grep/egrep**：可以通过特定的模式或正则表达式过滤日志内容。变种包括用户更友好的ack和速度更快的ag。
4. **awk**：一个多功能的文本扫描和处理工具。常用于从文本/日志文件中找出特定的列或内容，并输出给其他工具。
5. **sed**：一个文本流编辑工具，可以过滤和改变（例如，删除行/空格、替换/转换单词、增加计数）文本流并通过管道连接到stdout/stderr或者其他工具。

### 备份工具

1. **[rsync](http://rsync.samba.org/)**：一个快速的单向增量备份和镜像工具（LCTT 译注：rsync 应是双向的）。常用于复制一个数据仓库到线下存储，可以选择通过SSH或stunnel的加密连接。
2. **[rdiff-backup](http://www.nongnu.org/rdiff-backup/)**：另一个有效利用带宽的增量备份工具。管理两个连续快照之间的差分。
3. **duplicity**：一个加密的增量备份工具。使用GnuPG加密备份，并通过SSH上传到远程服务器。

### 性能监视工具

1. **top**：一个命令行的进程查看程序。可以监视系统负载、进程状态、CPU和内存占用。有一个更易用的变种htop。
2. **ps**：显示系统所有运行中进程的一个快照。输出可以定制成显示PID、PPID、用户、负载、内存、积累的用户/系统时间、启动时间、以及更多。有一个变种pstree可以用树结构显示进程。
3. **[nethogs](http://nethogs.sourceforge.net/)**：一个带宽监视工具，按进程来分组显示活动网络连接，实时汇报每个进程占用的（上传/下载）带宽。
4. **ngxtop**：一个网页服务器访问日志解析和监视工具，界面受到了top命令启发。它可以实时汇报整理过的页面请求列表，包括频率、大小、HTTP返回值、IP地址，等等。
5. **vmstat**：一个简单的命令行工具，可以显示多个实时系统特征，例如进程数、剩余内存、分页状态、CPU占用、块设备I/O活动、中断/上下文切换统计、等等。
6. **iotop**：一个基于ncurses的I/O监视工具，可以实时排序显示所有运行中进程的磁盘I/O活动。
7. **iostat**：一个命令行工具，可以汇报当前CPU使用情况，以及设备I/O使用情况，这里的I/O使用情况（例如，块传输速度、字节读/写速度）是按设备或分区来汇报的。

### 效率工具

1. **screen**：用来把一个单一的终端拆分成多个持久的虚拟终端，也支持远程用户访问，类似teamviewer的屏幕分享功能。
2. **tmux**：另一个终端复用工具，可以支持多个长期会话，还可以横向/纵向拆分终端。
3. **cheat**：一个简单的命令行工具，可以让你查看多个常用Linux命令的备忘录，就在手边非常方便。内建的备忘录也可以完全定制。
4. **apropos**：用来在帮助手册里查找描述或关键字很有用。

### 包管理工具

1. **apt**：基于Debian系统的事实上的包管理工具，例如Debian、Ubuntu或Backtrack。一个救生圈。
2. **apt-fast**：apt-get的一个支撑应用，可以通过多个并行连接明显提高apt-get的下载速度。
3. **apt-file**：用来查看某个特定文件属于哪个.deb包，或者显示一个特定.deb包里的所有文件。已安装和未安装的包都能支持。
4. **dpkg**：一个用来手动安装.deb包的命令行工具。强烈建议尽可能的使用apt。
5. **yum**：用于基于红帽的系统的自动包管理工具，比如RHEL、CentOS或Fedora。这是另一个救生圈！
6. **rpm**：通常我都是使用 rpm 来配合 yum 使用。有很多有用的参数，比如-q、-f、-l可以分别用来查询、指定文件和路径。

### 硬件工具

1. **lspci**：一个命令行工具，可以显示已安装的PCI设备的各种信息，比如型号名称、设备驱动、设备功能、内存地址、PCI总线地址。
2. **lshw**：一个命令行工具，可以查询和显示不同分类下的硬件配置的详细信息（例如，处理器、内存、主板、网络、存储）。支持多重输出格式：html、xml、json、text。
3. **[inxi](http://code.google.com/p/inxi/)**：一个综合硬件查看工具，可以提供不同硬件模块的总览，例如CPU，显卡，声卡，网卡，温度/风扇传感器，等等。

如果你希望推荐没有列在这里的好用的工具，不要客气，在评论区里分享一下。

---

via: <http://xmodulo.com/2014/08/useful-cli-tools-linux-system-admins.html>

作者：[Sarmed Rahman](http://xmodulo.com/author/sarmed) 译者：[zpl1025](https://github.com/zpl1025) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


解决八种Linux硬盘问题的技巧

Summary: 不能在Linux或者类UNIX系统的硬盘上写入数据？想解决服务器上磁盘损坏的问题吗？想知道你为什么总是在屏幕上看到磁盘已满的字眼吗？想学习处理这些问题的办法吗？试试一下这8个解决Linux及UNIX服务器硬盘问题的小贴士吧。  #1 - 错误: 设备上无剩余空间 当你的类UNIX系统磁盘写满了时你会在屏幕上看到这样的信息。本例中，我运行fallocate命令然后我的系统就会提示磁盘空间已经耗尽： $ fallocate -l 1G test4.img fallocate: test4.img: fallocate failed: No space left on device  第一步是运行df命令来查看一个有分区的文件系统的总磁

好文章

@我的印象笔记

如何解决Linux硬盘问题

@我的印象笔记

# 解决八种Linux硬盘问题的技巧

不能在Linux或者类UNIX系统的硬盘上写入数据？想解决服务器上磁盘损坏的问题吗？想知道你为什么总是在屏幕上看到“磁盘已满”的字眼吗？想学习处理这些问题的办法吗？试试一下这8个解决Linux及UNIX服务器硬盘问题的小贴士吧。

### #1 - 错误: 设备上无剩余空间

当你的类UNIX系统磁盘写满了时你会在屏幕上看到这样的信息。本例中，我运行[fallocate命令](http://www.cyberciti.biz/faq/howto-create-lage-files-with-dd-command/)然后我的系统就会提示磁盘空间已经耗尽：

```
$ fallocate -l 1G test4.img
fallocate: test4.img: fallocate failed: No space left on device

```

第一步是运行df命令来查看一个有分区的文件系统的总磁盘空间和可用空间的信息：

```
$ df

```

或者试试可读性比较强的输出格式：

```
$ df -h

```

部分输出内容：

```
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda6       117G   54G   57G  49% /
udev            993M  4.0K  993M   1% /dev
tmpfs           201M  264K  200M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none           1002M     0 1002M   0% /run/shm
/dev/sda1       1.8G  115M  1.6G   7% /boot
/dev/sda7       4.7G  145M  4.4G   4% /tmp
/dev/sda9       9.4G  628M  8.3G   7% /var
/dev/sda8        94G  579M   89G   1% /ftpusers
/dev/sda10      4.0G  4.0G     0 100% /ftpusers/tmp

```

使用df命令输出可以清楚地发现，在 /dev/sda10 分区下总共4.0Gb的空间被全部写满了。

#### 修复磁盘写满的问题

1.[用gzip，bzip2或tar命令压缩未压缩的日志和其它文件](http://www.cyberciti.biz/howto/question/general/compress-file-unix-linux-cheat-sheet.php)：

```
gzip /ftpusers/tmp/*.log
bzip2 /ftpusers/tmp/large.file.name

```

2.在类UNIX系统中[用rm命令删除不想要的文件](http://www.cyberciti.biz/faq/howto-linux-unix-delete-remove-file/)：

```
rm -rf /ftpusers/tmp/*.bmp

```

3.[用rsync命令移动文件至其它系统或外置硬盘](http://www.cyberciti.biz/faq/linux-unix-bsd-appleosx-rsync-delete-file-after-transfer/):

```
rsync --remove-source-files -azv /ftpusers/tmp/*.mov /mnt/usbdisk/
rsync --remove-source-files -azv /ftpusers/tmp/*.mov server2:/path/to/dest/dir/

```

4.在类UNIX系统中[找出最占磁盘空间的目录或文件](http://www.cyberciti.biz/faq/how-do-i-find-the-largest-filesdirectories-on-a-linuxunixbsd-filesystem/)：

```
du -a /ftpusers/tmp | sort -n -r | head -n 10
du -cks * | sort -rn | head

```

5.[清空指定文件](http://www.cyberciti.biz/faq/truncate-large-text-file-in-unix-linux/)。这招对日志文件很有效：

```
truncate -s 0 /ftpusers/ftp.upload.log
### bash/sh等 ##
>/ftpusers/ftp.upload.log
## perl ##
perl -e'truncate "filename", LENGTH'

```

6.在Linux和UNIX中找出并删除显示着但已经被删除的大文件：

```
## 基于Linux/Unix/OSX/BSD等系统 ##
lsof -nP | grep '(deleted)'

## 只基于Linux ##
find /proc/*/fd -ls | grep  '(deleted)'

```

清空它：

```
 ## 基于Linux/Unix/OSX/BSD等所有系统 ##
> "/path/to/the/deleted/file.name"
## 只基于Linux ##
> "/proc/PID-HERE/fd/FD-HERE"

```

### #2 - 文件系统是只读模式吗？

当你尝试新建或保存一个文件时，你可能最终得到诸如以下的错误：

```
$ cat > file
-bash: file: Read-only file system

```

运行mount命令来查看被挂载的文件系统是否处于只读状态：

```
$ mount
$ mount | grep '/ftpusers'

```

在基于Linux的系统中要修复这个问题，只需将这个处于只读状态的文件系统重新挂载即可：

```
# mount -o remount,rw /ftpusers/tmp

```

（LCTT 译注：如果硬盘由于硬件故障而 fallback 到只读模式，建议不要强制变回读写模式，而是赶快替换硬盘）

另外，我是这样[用rw模式重新挂载FreeBSD 9.x服务器的根目录](http://www.cyberciti.biz/faq/howto-freebsd-remount-partition/)的:

```
# mount -o rw /dev/ad0s1a /

```

### #3 - Am I running out of inodes?

有时候，df命令能显示出磁盘有空余的空间但是系统却声称文件系统已经写满了。此时你需要用以下命令来检查能在文件系统中识别文件及其属性的[索引节点](http://www.cyberciti.biz/tips/understanding-unixlinux-filesystem-inodes.html)：

```
$ df -i
$ df -i /ftpusers/

```

部分输出内容：

```
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda8      6250496 11568 6238928    1% /ftpusers

```

如上 /ftpusers 下有总计62,50,496KB大小的索引节点但是只有11,568KB被使用。你可以在 /ftpusers 位置下另外创建62,38,928KB大小的文件。如果你的索引节点100%被使用了，试试看以下的选项：

* 找出不想要的文件并删除它，或者把它移动到其它服务器上。
* 找出不想要的大文件并删除它，或者把它移动到其它服务器上。

（LCTT 译注：如果一个分区存储了太多的小文件，会出现 inode 用完而存储扇区还有空闲的情况，这种情况下要么清除小文件或在不需要独立访问的情况下将它们打包成一个大文件；要么将数据保存好之后重新分区，并设置分区的 -t news 属性，增加 inode 分配）

### #4 - 我的硬盘驱动器宕了吗？

[日志文件中的输入/输出错误(例如 /var/log/messages)](http://www.cyberciti.biz/tips/linux-find-out-if-harddisk-failing.html)说明硬盘出了一些问题并且可能已经失效，你可以用smartctl命令来查看硬盘的错误，这是一个在类UNIX系统下控制和监控硬盘状态的一个命令。语法如下：

```
smartctl -a /dev/DEVICE
# 在Linux服务器下检查 /dev/sda
smartctl -a /dev/sda

```

你也可以用"Disk Utility"这个软件来获得同样的信息。

[](http://www.cyberciti.biz/tips/linux-find-out-if-harddisk-failing.html)

图 01: Gnome磁盘工具(Applications > System Tools > Disk Utility)

>
> **注意**: 不要对S.M.A.R.T.工具期望太高，它在某些状况下无法工作，我们要定期做备份。
>
>
>

### #5 - 我的硬盘驱动器和服务器是不是太热了？

高温会引起服务器低效，所以你需要把服务器和磁盘维持在一个平稳适当的温度，高温甚至能导致服务器宕机或损坏文件系统和磁盘。[用hddtemp或smartctl功能，通过从支持S.M.A.R.T.功能的硬盘上读取数据的方式，从而查出你的Linux或基于UNIX系统上的硬盘温度](http://www.cyberciti.biz/tips/howto-monitor-hard-drive-temperature.html)。只有现代硬驱动器有温度传感器。hddtemp功能也支持从SCSI驱动器读取S.M.A.R.T.信息。hddtemp能作为一个简单的命令行工具或守护程序来从所有服务器中获取信息：

```
hddtemp /dev/DISK
hddtemp /dev/sg0

```

部分输出内容如下：

[](http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/attachment/hddtemp-on-rhel/)

图 02: hddtemp正在运行

你也可以像下面显示的那样使用smartctl命令：

```
smartctl -d ata -A /dev/sda | grep -i temperature

```

#### 我怎么获取CPU的温度

你可以使用Linux硬件监控工具，例如像[用基于Linux系统的lm\_sensor功能来获取CPU温度](http://www.cyberciti.biz/faq/howto-linux-get-sensors-information/)：

```
sensors

```

Debian服务器的部分输出内容：

[](http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/attachment/sensors-command-on-debian-server/)

图 03: sensors命令提供了一台Linux计算机的CPU核心温度和其它信息

### #6 - 处理损坏的文件系统

服务器上的文件系统可能会因为硬件重启或一些其它的错误比如坏的扇区而损坏。你可以[用fsck命令来修复损坏的文件系统](http://www.cyberciti.biz/tips/repairing-linux-ext2-or-ext3-file-system.html)：

```
umount /ftpusers
fsck -y /dev/sda8

```

来看看[怎么应对Linux文件系统故障](http://www.cyberciti.biz/tips/surviving-a-linux-filesystem-failures.html)的更多信息。

### #7 - 处理Linux中的软阵列

输入以下命令来查看Linux软阵列的最近状态：

```
 ## 获得 /dev/md0 上磁盘阵列的具体内容 ##
mdadm --detail /dev/md0

## 查看状态 ##
cat /proc/mdstat
watch cat /proc/mdstat

```

部分输出内容：

[](http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/attachment/linux-mdstat-output/)

图 04: 查看Linux软阵列状态命令

你需要把有故障的硬件驱动器更换掉，别删错了。本例中，我更换了 /dev/sdb (RAID 6中的第二个硬件驱动器)。没必要依靠离线存储文件来修复Linux上的磁盘阵列，因为这只在你的服务器支持热插拔硬盘的情况下才能工作：

```
## 从一个md0阵列中删除磁盘 ##
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md0 --remove /dev/sdb1

# 对 /dev/sdbX 的剩余部分做相同操作 ##
# 如果不是热插拔硬盘就执行关机操作 ##
shutdown -h now

## 从 /dev/sda 复制分区表至新的 /dev/sdb 下 ##
sfdisk -d /dev/sda | sfdisk /dev/sdb
fdisk -l

## 添加 ##
mdadm --manage /dev/md0 --add /dev/sdb1
# 对 /dev/sdbX 的剩余部分做相同操作 ##

# 现在md0会再次同步，通过显示屏查看 ##
watch cat /proc/mdstat

```

来看看[加快Linux磁盘阵列同步速度的小贴士](http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html)来获取更多信息。

### #8 - 处理硬阵列

你可以用samrtctl命令或者供应商特定的命令来查看磁盘阵列和你所管理的磁盘的状态：

```
## SCSI磁盘
smartctl -d scsi --all /dev/sgX

## Adaptec磁盘阵列
/usr/StorMan/arcconf getconfig 1

## 3ware磁盘阵列
tw_cli /c0 show

```

对照供应商特定文档来更换你的故障磁盘。

### 监控磁盘的健康状况

来看看我们先前的教程：

1. [Monitoring hard disk health with smartd under Linux or UNIX operating systems](http://www.cyberciti.biz/tips/monitoring-hard-disk-health-with-smartd-under-linux-or-unix-operating-systems.html)
2. [Shell script to watch the disk space](http://www.cyberciti.biz/tips/shell-script-to-watch-the-disk-space.html)
3. [UNIX get an alert when disk is full](http://www.cyberciti.biz/faq/mac-osx-unix-get-an-alert-when-my-disk-is-full/)
4. [Monitor UNIX / Linux server disk space with a shell scrip](http://bash.cyberciti.biz/monitoring/shell-script-monitor-unix-linux-diskspace/)
5. [Perl script to monitor disk space and send an email](http://www.cyberciti.biz/tips/howto-write-perl-script-to-monitor-disk-space.html)
6. [NAS backup server disk monitoring shell script](http://bash.cyberciti.biz/backup/monitor-nas-server-unix-linux-shell-script/)

### 结论

我希望以上这些小贴士会帮助你改善在基于Linux/Unix服务器上的系统磁盘问题。我还建议执行一个好的备份计划从而有能力从磁盘故障、意外的文件删除操作、文件损坏和服务器完全被破坏等意外情况中恢复：

* [Debian / Ubuntu: Install Duplicity for encrypted backup in cloud](http://www.cyberciti.biz/faq/duplicity-installation-configuration-on-debian-ubuntu-linux/)
* [HowTo: Backup MySQL databases, web server files to a FTP server automatically](http://www.cyberciti.biz/tips/how-to-backup-mysql-databases-web-server-files-to-a-ftp-server-automatically.html)
* [How To Set Red hat & CentOS Linux remote backup / snapshot server](http://www.cyberciti.biz/faq/redhat-cetos-linux-remote-backup-snapshot-server/)
* [Debian / Ubuntu Linux install and configure remote filesystem snapshot with rsnapshot incremental backup utility](http://www.cyberciti.biz/faq/linux-rsnapshot-backup-howto/)
* [Linux Tape backup with mt And tar command tutorial](http://www.cyberciti.biz/faq/linux-tape-backup-with-mt-and-tar-command-howto/)

---

via: <http://www.cyberciti.biz/datacenter/linux-unix-bsd-osx-cannot-write-to-hard-disk/>

作者：[nixCraft](http://www.cyberciti.biz/tips/about-us) 译者：[ZTinoZ](https://github.com/ZTinoZ) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


使用 UbuTricks 在ubuntu上安装最新游戏和应用

Summary: UbuTricks是一个可以帮助你在ubuntu上安装几个最新版本的游戏和应用的程序。 UbuTricks是一个有简单界面，基于Zenity的图形脚本。虽然早期开发中，它的目标是通过简单的界面操作来安装Ubuntu14.04 及以后发行版上应用程序的更新。 应用程序会自动下载安装。一些更新可能会需要ppa，其它的将会通过编译源代码安装。编译过程可能会需要一些时间，当从ppa或者deb文件安装应该会快一点，取决于你的下载速度。 一共有以下几种安装方式：  PPA - 程序将会从PPA下载安装 DEB - 程序将会从DEB文件进行安装 Source - 程序会进行编译安装 (可能需要

咦？可以通过这个安装google earth，不错不错

# 使用 UbuTricks 在ubuntu上安装最新游戏和应用

UbuTricks是一个可以帮助你在ubuntu上安装几个最新版本的游戏和应用的程序。

UbuTricks是一个有简单界面，基于Zenity的图形脚本。虽然早期开发中，它的目标是通过简单的界面操作来安装Ubuntu14.04 及以后发行版上应用程序的更新。

应用程序会自动下载安装。一些更新可能会需要ppa，其它的将会通过编译源代码安装。编译过程可能会需要一些时间，当从ppa或者deb文件安装应该会快一点，取决于你的下载速度。

### 一共有以下几种安装方式：

* PPA - 程序将会从PPA下载安装
* DEB - 程序将会从DEB文件进行安装
* Source - 程序会进行编译安装 (可能需要一点时间)
* Script - 程序会通过开发者提供的脚本进行安装
* Archive - 程序会通过压缩文件安装
* Repository - 程序从仓库安装 (不是PPA)

### 你可以安装的应用程序列表

通过UbuTricks可以安装下面应用的最新版本：

### 游戏

* 0 A.D.
* Battle for Wesnoth (Dev)
* VCMI (Heroes III Engine)

### 文件管理

* PCManFM

### 互联网应用

* Geary
* HexChat
* QupZilla
* QuiteRSS

### 多媒体

* SMPlayer
* Transmageddon
* Kdenlive
* Fotoxx
* jAlbum
* GIMP
* Shutter
* Qmmp
* XBMC

### 办公/电子书/文档

* Calibre
* LibreOffice

### 工具

* Ubuntu Tweak

### 桌面环境

* Cinnamon

### 其他

* Google Earth
* Wine

### 下载，安装Ubuntutricks

你可以从[这里](http://www.tuxarena.com/intro/files/ubutricks.sh)下载ubuntutricks，让它可执行然后双击脚本或者从终端里运行它。

### 截图

---

via: <http://www.ubuntugeek.com/ubutricks-script-to-install-the-latest-versions-of-several-games-and-applications-in-ubuntu.html>

作者：[ruchi](http://www.ubuntugeek.com/author/ubuntufix) 译者：[DoubleShit](https://github.com/DoubleShit) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


Qshutdown – 一个先进的关机神器

Summary: qshutdown是一个QT程序，用于让计算机在指定时间或者在几分钟后关机/重启/挂起/睡眠。对于那些只在特定时间使用计算机工作的人而言，可能很有用。  qshutdown将在最后70秒时显示3次警告提醒。（如果设置了1分钟或者本地时间+1，它只会显示一次。） 该程序使用qdbus来发送关机/重启/挂起/睡眠请求到gnome或kde会话管理器，或者到HAL或DeviceKit，而如果这些都没有工作，那么就会使用sudo shutdown -P now命令进行关机（注意，当发送请求到HAL或DeviceKit，或者使用shutdown命令时，会话不会被保存。如果使用shutdown命令，该程序只会被关机

定时关机，写个脚本不就解决了。造轮子

同意楼上[黑线]

好东西

Repost

定时关机，写个c程序不就解决了。造轮子

定时关机，写个汇编不就解决了。造轮子

定时关机，写个机器语言不就解决了。造轮子

sudo sleep 60&&echo "We will poweroff after 30s!"&&sleep 30&&sudo poweroff

# Qshutdown – 一个先进的关机神器

qshutdown是一个QT程序，用于让计算机在指定时间或者在几分钟后关机/重启/挂起/睡眠。对于那些只在特定时间使用计算机工作的人而言，可能很有用。

qshutdown将在最后70秒时显示3次警告提醒。（如果设置了1分钟或者“本地时间+1”，它只会显示一次。）

该程序使用qdbus来发送关机/重启/挂起/睡眠请求到gnome或kde会话管理器，或者到HAL或DeviceKit，而如果这些都没有工作，那么就会使用‘sudo shutdown -P now’命令进行关机（注意，当发送请求到HAL或DeviceKit，或者使用shutdown命令时，会话不会被保存。如果使用shutdown命令，该程序只会被关机或重启）。所以，如果在shutdown或reboot时间到时却什么都没发生，这就意味着用户缺少使用shutdown命令的权限。

在这种情况下，你可以进行以下操作：

粘贴以下信息到终端：“EDITOR:nano sudo -E visudo”并添加此行：“\* ALL = NOPASSWD:/sbin/shutdown”这里\*替换为你的“用户名”或“%组名”。

倒计时最大计数为1440分钟（24小时）。配置文件（和日志文件）位于~/.qshutdown，配置文件为：qshutdown.conf。

对于管理员：

在将qshutdonw.conf中的Lock\_all选项设置为true后，用户将不能修改设置。如果你使用“sudo chown root -R ~/.qshutdown”和“sudo chmod 744 ~/.qshutdown/qshutdown.conf”命令修改qshutdown.conf的权限后，用户将不能修改配置文件。

### Ubuntu中安装Qshutdown

打开终端，然后运行以下命令

```
sudo apt-get install qshutdown

```

### 屏幕截图

---

via: <http://www.ubuntugeek.com/qshutdown-an-avanced-shutdown-tool.html>

作者：[ruchi](http://www.ubuntugeek.com/author/ubuntufix) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


Linux 有问必答：如何从VirtualBox中从主机访问NAT客户机

Summary: 提问: 我有一台运行在VirtualBox上的使用NAT的虚拟机，因此虚拟机会被VirtualBox分配一个私有IP地址(10.x.x.x)。如果我想要从主机SSH到虚拟机中，我该怎么做？  VirtualBox对虚拟机支持几种不同的网络方式，其中一种是NAT网络。当虚拟机启用NAT后，VirtualBox会自动在虚拟机和主机之间进行网络翻译，因此你不必在虚拟机和主机之间配置任何东西。这也意味着NAT中的虚拟机对于外部网络以及主机本身是不可见的。这会在你想要从主机访问虚拟机时会产生问题（比如SSH）。 如果你想从VirtualBox的NAT环境的虚拟机，你可以在GUI或者命令行下启用V

太麻烦了，还是vmware workstation吧

太麻烦了，直接vmware吧

学习

[good]

哦，我之前都是双网卡。

回复@ontheway2015: 同太麻烦，vagrant 自动帮你完成这些 //@ontheway2015:太麻烦了，直接vmware吧

回复@ontheway2015: 同太麻烦，vagrant 自动帮你完成这些

双网卡。

# Linux 有问必答：如何从VirtualBox中从主机访问NAT客户机

>
> **提问**: 我有一台运行在VirtualBox上的使用NAT的虚拟机，因此虚拟机会被VirtualBox分配一个私有IP地址(10.x.x.x)。如果我想要从主机SSH到虚拟机中，我该怎么做？
>
>
>

VirtualBox对虚拟机支持几种不同的网络方式，其中一种是NAT网络。当虚拟机启用NAT后，VirtualBox会自动在虚拟机和主机之间进行网络翻译，因此你不必在虚拟机和主机之间配置任何东西。这也意味着NAT中的虚拟机对于外部网络以及主机本身是不可见的。这会在你想要从主机访问虚拟机时会产生问题（比如SSH）。

如果你想从VirtualBox的NAT环境的虚拟机，你可以在GUI或者命令行下启用VirtualBox NAT的端口转发。本篇教程将会演示**如何通过启用22端口转发而从主机SSH连接到NAT环境的客户机**。如果你先想要从HTTP访问NAT的客户机，用80端口代替22端口即可。

### 通过GUI配置VirtualBox端口转发

在VirtualBox中选择你想要访问的虚拟机，打开虚拟机的“设置”。点击左侧的“网络”菜单，点击网络适配选项的“高级”。

点击“端口转发”按钮

你会看到一个配置端口转发规则的窗口。点击右上角的“添加”图标。

就会看到像下面那样的转发规则。

* **Name**: SSH (可以是任意唯一名)
* **Protocol**: TCP
* **Host IP**: 127.0.0.1
* **Host Port**: 2222 (任何大于1024未使用的端口)
* **Guest IP**: 虚拟机IP
* **Guest Port**: 22 (SSH 端口)

端口转发的规则会自动在你启动虚拟机的时候启用。为了验证。可以在你启用虚拟机后检查端口2222是否被VirtualBox开启了。

```
$ sudo netstat -nap | grep 2222

```

现在端口转发可以使用了，你可以用下面的命令SSH到虚拟机。

```
 $ ssh -p 2222 <login>@127.0.0.1

```

发送到127.0.0.1:2222的登录请求会自动被VirtualBox翻译成10.0.2.15:22，这可以让你SSH到虚拟机中。

### 通过命令行配置VirtualBox端口转发

VirtualBox有一个称为VBoxManage的命令行管理工具。使用命令行工具，你也可以为你的虚拟机设置端口转发。

下面的命令会为IP地址为10.0.2.15的虚拟机设置一个名字为"centos7"的端口转发规则，SSH的端口号为22,映射到本地主机的端口为2222。规则的名字（本例中是SSH）必须是唯一的。

```
$ VBoxManage modifyvm "centos7" --natpf1 "SSH,tcp,127.0.0.1,2222,10.0.2.15,22"

```

规则创建之后，你可以用下面的命令来验证。

```
 $ VBoxManage showvminfo "centos7" | grep NIC

```

---

via: <http://ask.xmodulo.com/access-nat-guest-from-host-virtualbox.html>

译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


菜鸟教程：全面学习 pwd 命令

Summary: 对于那些使用Linux命令行的人来说，pwd命令是非常有用的，它告诉你你现在在那个目录，从根目录(/)如何到达。特别是对于或许会在目录的切换间容易糊涂的Linux新手而言，pwd 可以拯救他们。   什么是pwd? pwd 代表的是Print Working Directory（打印当前目录）。如它的名字那样，pwd会打印出当前工作目录，或简单的来说就是当前用户所位于的目录。它会打印出以根目录 (/)为起点的完整目录名（绝对目录）。这条命令是一条shell内建命令，并且在大多数shell中都可以使用，如bash、Bourne shell，ksh、zsh等等。 pwd的基本语法: # pwd   pwd的

mark

Repost

@取神马名字啊啊啊 linux坑深似海[哈哈]

菜鸟学习一记。

//@LR机器学习计算机视觉: 转发微博

Repost

介绍的好详细

@我的印象笔记

详细的让人生厌。。。

详细的太多了。我就知道pwd ,不知道还有—L，-P ，--version等参数。

PS1和后面的部分完全是画蛇添足

# 菜鸟教程：全面学习 pwd 命令

对于那些使用Linux命令行的人来说，‘**pwd**‘命令是非常有用的，它告诉你你现在在那个目录，从根目录(**/**)如何到达。特别是对于或许会在目录的切换间容易糊涂的Linux新手而言，‘**pwd**‘ 可以拯救他们。

### 什么是pwd?

‘**pwd**‘ 代表的是‘**Print Working Directory**’（打印当前目录）。如它的名字那样，‘**pwd**’会打印出当前工作目录，或简单的来说就是当前用户所位于的目录。它会打印出以根目录 (**/**)为起点的完整目录名（绝对目录）。这条命令是一条shell内建命令，并且在大多数shell中都可以使用，如bash、Bourne shell，ksh、zsh等等。

#### pwd的基本语法:

```
# pwd [OPTION]

```

#### pwd的选项

 |  **选项** |  **描述** |
|  -L (即逻辑路径logical ) |  使用环境中的路径，即使包含了符号链接 |
|  -P (即物理路径physical) |  避免所有的符号链接 |
|  –help  |  显示帮助并退出 |
|  –version |  输出版本信息并退出 |

如果同时使用了‘**-L**‘和‘**-P**‘，‘**-L**‘会有更高的优先级。如果没有指定参数，pwd会避开所有的软链接，也就是说会使用‘**-P**‘参数。

pwd的退出状态:

 | 0 | 成功 |
| 非零值 | 失败 |

本篇的目的是采用例子让你对‘**pwd**‘有更深入的领悟。

**1.** 打印当前工作目录.

```
avi@tecmint:~$ /bin/pwd
/home/avi

```

*打印工作目录*

**2.** 为文件夹创建一个符号链接（比如说在home目录下创建一个**htm**链接指向**/var/www/html**）。进入新创建的目录并打印出含有以及不含符号链接的目录。

在home目录下创建一个htm链接指向/var/www/html，并进入。

```
avi@tecmint:~$ ln -s /var/www/html/ htm
avi@tecmint:~$ cd htm

```

*创建符号链接*

**3.** 从当前环境中打印目录即使它含有符号链接。

```
avi@tecmint:~$ /bin/pwd -L
/home/avi/htm

```

*打印工作目录*

**4.** 解析符号链接并打印出物理目录。

```
avi@tecmint:~$ /bin/pwd -P
/var/www/html

```

*打印物理工作目录*

**5.** 查看一下“**pwd**”和“**pwd -P**”的输出是否一致，也就是说，如果没有跟上选项，“**pwd**”时候会自动采用**-P**选项。

```
avi@tecmint:~$ /bin/pwd
/var/www/html

```

*检查pwd输出*

**结论：** 上面例子4和5的输出很明显（结果相同），当你“**pwd**”后面不带参数时，pwd会使用“**-P**”选项。

**6.** 打印pwd命令的版本。

```
avi@tecmint:~$ /bin/pwd --version

pwd (GNU coreutils) 8.23
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Jim Meyering.

```

*检查pwd命令版本*

**注意：** ‘pwd’ 通常不带选项运行，且没有任何参数

**重要：** 你可能注意到我们刚才运行的都是 “**/bin/pwd**” 而不是 “**pwd**”。

这有什么区别呢？直接使用“**pwd**”意味着使用shell内置的pwd。你的shell可能有不同版本的pwd。具体请参考手册。当你使用的是**/bin/pwd**时，我们调用的是二进制版本的命令。虽然二进制的版本有更多的选项，但是它们两者都能打印当前的目录。

**7.** 打印所有含有可执行pwd的路径

```
avi@tecmint:~$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd

```

*打印可执行文件路径*

**8.** 存储“**pwd**”命令的值到变量中（比如说：**a** ），并从中打印变量的值（对于观察shell脚本很重要）。

```
avi@tecmint:~$ a=$(pwd)
avi@tecmint:~$ echo "Current working directory is : $a"
Current working directory is : /home/avi

```

*存储pwd的值到变量中*

下面的例子中也可以用**printf**来替代。

**9.** 将工作路径切换到其他地方（比如说 **/home**），并在命令行中显示。通过执行命令（比如说 ‘**ls**‘）来验证一切**OK**。

```
avi@tecmint:~$ cd /home
avi@tecmint:~$ PS1='$pwd> '     [注意例子中的单引号]
> ls

```

*改变当前工作路径*

**10.** 设置多行显示 （就像下面这样），

```
/home
123#Hello#!

```

接着执行命令（比如说 **ls**）来检验一切**OK**。

```
avi@tecmint:~$ PS1='
> $PWD
$ 123#Hello#!
$ '

/home
123#Hello#!

```

*设置多行显示*

**11.** 一下子检查当前工作路径以及先前的工作路径。

```
avi@tecmint:~$ echo “$PWD $OLDPWD”
/home /home/avi

```

*检查当前工作路径*

**12.** pwd文件的绝对路径（以**/**开始）。

```
/bin/pwd

```

**13.** pwd源文件文件的绝对路径（以**/**开始）。

```
/usr/include/pwd.h

```

**13.** pwd手册的绝对路径（以**/**开始）。

```
/usr/share/man/man1/pwd.1.gz

```

**15.** 写一个shell脚本分析home目录下的一个目录（比如**tecmint**）。如果当前目录是**tecmint**就输出“**Well! You are in tecmint directory**”接着输出“**Good Bye**”，不然就在**tecmint**下面创建一个目录并提示你cd进入它。

让我们首先创建一个‘tecmint’目录，在下面创建一个名为‘pwd.sh’的脚本文件。

```
avi@tecmint:~$ mkdir tecmint
avi@tecmint:~$ cd tecmint
avi@tecmint:~$ nano pwd.sh

```

接下来在pwd.sh中加入下面的脚本。

```
#!/bin/bash

x="$(pwd)"
if [ "$x" == "/home/$USER/tecmint" ]
then
     {
      echo "Well you are in tecmint directory"
      echo "Good Bye"
     }
else
     {
      mkdir /home/$USER/tecmint
      echo "Created Directory tecmint you may now cd to it"
     }
fi

```

给予执行权限并运行。

```
avi@tecmint:~$ chmod 755 pwd.sh
avi@tecmint:~$ ./pwd.sh
Well you are in tecmint directory
Good Bye

```

#### 总结

**pwd**是一个最简单且会广泛用到的命令。掌握好pwd是使用Linux终端的基础。就是这些了。我很快会再带来另外有趣的文章，请不要走开继续关注我们。

---

via: <http://www.tecmint.com/pwd-command-examples/>

作者：[Avishek Kumar](http://www.tecmint.com/author/avishek/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


是什么造就了一个优秀的程序员？

值得一看。

Guido van Rossum: 遗传性大脑结构差异。 Linus Tovalds: 品味。

优秀程序员必备的五个重要

# 是什么造就了一个优秀的程序员？

是什么造就了一个优秀的程序员？首先问问你自己吧，这会是个有趣的问题。它让你反思自己的软件开发技术。这个问题也适合问问你的同事们。它可以带来一些关于如何协同工作的有趣讨论。下面是我认为成为一个优秀程序员必备的五个重要技能。

<img src="content_image/album_201412_03_110535gfygkybyr6xig0k5.jpg" alt="" title="">

### 1. 分解问题

编程是为了解决问题，但在你开始写代码前，需要明白如何解决问题。优秀程序员的一项技能是把大的问题逐层分解成一个个更小的部分，直到每一部分都可以很容易解决。但找到解决问题的方式往往并没有那么简单。优秀程序员能找到方法去建立问题模型，这种方法使得输出结果的程序容易解释、实现和测试。

我写过的某些最复杂的程序在局部上都是难懂的，因为代码实现并不能很好地匹配这个问题，也就导致了编写的代码难以理解。当问题很好地建模的时候，我赞同伯尼·科赛尔所说的话（取自著名的[程序员在工作](http://www.amazon.com/review/R2OV0TG7MJGXGL)中的访谈记录）：

>
> “……很少有本质上很难的程序。如果你盯着某一块代码，它看起来确实很难；如果你无法理解这段代码应该产生什么结果，这基本上就是暗示它很难被理解了。在这个时候，你不应该卷起袖子，尝试修复代码；你需要只是往回一步，再仔细考虑清楚。当你已经深思熟虑后，你会发现问题变得很简单”。
>
>
>

### 2. 场景分析

优秀开发者能考虑到如何使程序适合多种不同的场景。这项能力既适用于处理程序本身的逻辑，又适用于处理可能会发生的外部和内部事件。为了考虑逻辑上的不同思路，他们问自己这样的问题：如果这个参数为空会发生什么？如果所有条件都为假呢？这个方法在线程上是安全的吗？为了发现软件需要处理的各种类型的事件，他们问自己这样的问题：如果队列占满了会怎样？如果请求收不到响应会怎样？如果在这台服务器重启的同时另外一台服务器也重启了会怎样？

优秀程序员问他们自己：如何发现程序的缺陷？换句话说，他们有能力像测试人员一样思考。相反，缺少经验的程序员通常只考虑正确的路径——在一切都按照预期进行时正常的控制流（当然这也是程序在大部分时候的情况）。当然，异常不可避免要发生，所以需要程序能处理这些情况。

### 3. 命名

编程由大量的命名对象组成：类、方法和变量。当编码完成得很好时，程序也具备了自我描述的能力，也就是说通过阅读源代码可以清楚地明白程序中函数的含义。自描述代码的一个好处就是很自然地产生许多更短的命名方法，而不是少数更长的方法，因为你有更多空间去放置有意义的名字（还有[其它原因](http://henrikwarne.com/2013/08/31/7-ways-more-methods-can-improve-your-program/)解释为什么短小方法更好）。

想出好的名字比它听起来更困难一些。我喜欢这段引用（来自菲尔·卡尔顿）：“在计算机科学领域只有两件困难的事情：缓存失效和命名对象。”命名在一定程度上很困难是因为你需要清楚地明白每一个名字究竟要代表什么。有时候命名不是一下子就清晰明了，只有随着软件开发进展才会慢慢显现。因此，重命名和命名一样重要。

命名对象也包含提出要用的概念和这些概念该如何称呼。通过深思熟虑，清楚命名所使用的惯用概念（在程序中和与程序员、非程序员讨论时使用），这使得编写程序变得更加容易。

### 4. 一致性

也许编程中最大的挑战是管理复杂性。保持一致性是处理复杂性的一种方法。它通过允许我们看到对象命名、使用和处理所采用的模式和推理来降低了某些复杂性。有了一致性，我们就无需用脑去记住异常和随机变量。取而代之，我们可以更关注[程序本身的复杂性，而不是偶然产生的复杂性](http://faculty.salisbury.edu/~xswang/Research/Papers/SERelated/no-silver-bullet.pdf)。

保持一致性从整体看来是很重要的。它应用在变量名字和分组、方法命名、模块划分、目录结构、GUI、错误处理、日志输出和文档等很多方面。比如，如果某些变量是的相关，并一起出现（在声明、方法调用或数据库中的列），而且总是以相同的顺序使用它们。那么当其中一个消失或者整体被打乱时，你就会很容易发现。对于一个操作，如果在一个地方叫delete，就不要在另一个地方叫remove：务必使用相同的名字。史蒂夫·麦克奈尔在[代码大全](http://www.amazon.com/review/R269BBARXH1V6R/)中对于使用相反命名有相同的建议。比如，begin和end是相反的，就如同start和stop一样。当使用相反对时不要混用不同对的名字（比如使用begin和stop）。

当修改一段程序时可能会引入非一致性。粗心大意的程序员不会注意到他们添加的代码是否和已有的代码保持一致。优秀程序员会严苛地确保在这些看似很小的细节上都要做到精益求精。他们知道保持一致性对于在软件开发的整个过程中处理复杂性是多么的重要。

### 5. 学习能力

作为一名软件开发者，你需要持续学习。在为软件添加一项新功能前，你必须明白为什么要这么做。在给一个已有程序添加代码前，你通常必须知道已有代码在做什么，以便合适地嵌入新功能。你还需要学习相关系统，以便正确地与它们交互。因此，快速学习的能力使你成为一名更加高效的开发者。

而且，因为软件工程领域的开发速度是如此的快速，所以新的编程语言、工具、技术和框架需要学习层出不穷。这是好还是坏，就看你怎么看。佛瑞德·布鲁克斯把学习能力列为[技能的快乐之一](http://henrikwarne.com/2012/06/02/why-i-love-coding/)，对此我深表赞同。学习新事物本身就是令人心满意足的，它也意味着开发者的生活从不无聊。

### 总结

上面所有的技能都是通用的——它们中没有一项是针对某种语言、某个框架或某种技术。如果你拥有它们，你就能快速学习一门新的语言或工具，在新的环境下写出优秀的软件。而且，因为它们在本质上是通用的，所以不会在若干年以后过时。

是什么造就了一个优秀的程序员？以上便是我的观点。你认为造就一个优秀程序员的因素有哪些？在评论里告诉我吧。

---

via: <http://henrikwarne.com/2014/06/30/what-makes-a-good-programmer/>

作者：[Henrik Warne](http://henrikwarne.com/about/) 译者：[KayGuoWhu](https://github.com/KayGuoWhu) 校对：[Caroline](https://github.com/carolinewuyan)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


当微软离去时

Summary: 开源.Net，这与Linux无关它与SaaS相关，也和一位并不偏执和狂热的90后CEO相关，SoylentNews博主hairyfeet道，纳德拉很明智，而且意识到了编程语言的价值不在于专利或OS排他性，而在于服务和对语言的支持越多的平台使用该语言，它就会越好。 如果自由和开源软件迷们在过去的那些日子里感到有些许困惑的话，这也许是可以理解的，即便是头昏、头痛以及头晕也算是常见的。 你或许会问，这又是什么新的病症？ 好吧，Linux女孩很高兴告诉你，它不是什么病症。不过，然而它并不意味着它很容易治愈。 原因无他，而是微软开源.Net并让它可以在Linux

编程语言的价值不在于专利或OS排他性，而在于服务和对语言的支持

[爱你][爱你][爱你]

当windows爱上linux～[爱你][爱你]

电脑在这么卡 我就把你刷成linux

拭目以待吧

流氓突然做起来慈善

# 当微软离去时

**开源.Net，“这与Linux无关——它与SaaS相关，也和一位并不偏执和狂热的90后CEO相关，”SoylentNews博主hairyfeet道，“纳德拉很明智，而且意识到了编程语言的价值不在于专利或OS排他性，而在于服务和对语言的支持……越多的平台使用该语言，它就会越好。”**

如果自由和开源软件迷们在过去的那些日子里感到有些许困惑的话，这也许是可以理解的，即便是头昏、头痛以及头晕也算是常见的。

你或许会问，这又是什么新的病症？

好吧，Linux女孩很高兴告诉你，它不是什么病症。不过，然而它并不意味着它很容易治愈。

原因无他，而是微软开源.Net并让它可以在Linux或Mac OS上运行的消息。

是的，你没听错：史蒂夫·鲍尔默曾经可能[称Linux为“癌症”](http://www.linuxinsider.com/perl/story/35697.html)，但今天雷蒙德（微软总部，代称微软）有个新发现，曾经不被包容的，但是却转头[“爱”上了Linux](http://linux.cn/article-4056-1.html)!

它让微软看起来很奇怪——它也驱使FOSS迷们聚拢到博客圈的破败的Broken Windows Lounge，而去的人的数量更是空前的。

一杯龙舌兰可以让你不再头疼么？这是现在众多探究的问题之一。

### ‘繁荣的机遇’

“这是个重大的消息，虽然有点过时了，”克里斯·特拉弗斯，一位[博主](http://ledgersmbdev.blogspot.com/)，他为[LedgerSMB](http://www.ledgersmb.org/)项目工作，告诉Linux女孩。

“我们生活的世界中，即使没有大的商业公司支持，新的开源编程语言也很兴旺，而闭源的编程语言仅能在大的商业公司的帮助下得到支持，”特拉弗斯说，“例如，Bing闭源杀死了REBOL 2.x。”

“这项运动很明显酝酿已久——一家像微软这样庞大的公司不会有‘突然开源’这种复杂的东西——而我想，在某种程度上，微软一定看到了Sun开源OpenJDK时的一些前兆了。”他暗示道。

同时，“这也为诸如C#和F#这样的语言提供了比当前市场更为兴盛的机会，”特拉弗斯说。

### ‘我仍然不相信你’

“我首先想说，‘谢谢你，微软！’”[Linux Rants](http://linuxrants.com/)博主麦克·斯通开篇说，“我们真的很欣赏你开源.Net并推动它跨平台，这是迈向正确方向的一步！”

“然而，我仍然不相信你。”他补充道。

“我很喜欢微软在考虑开源，但是我没有见到它向GPL迈进，”斯通告诉Linux女孩，“这让我想到了这么个可能性，微软提供了多个平台的软件供你使用，但却会把开发者和它捆绑起来。”

此外，微软不会作出任何保证，保证.Net常年开源，他指出。

“这意味着微软可以退出，并让开发出来的应用程序成为跨平台的Windows专有软件，”他警告道，“我不会相信微软的承诺，我会翘首期盼微软他们的突然而必然的背叛。”

### ‘留心不怀好意的礼物’

该运动明显带有失望的气息，Google+博主阿里桑德罗·埃伯索尔暗示道。

“他们来得太晚了，”埃伯索尔说，“Java已经先下手为强了，当.Net还是Windows/Microsoft专有产品时，Java已经遍布四处了。试着让人采用，希望好运吧。”

此外，“如果它打上GPL烙印来保护代码创建者的话我才会相信它，”他补充道，“一个脆弱的MIT许可证任何时候都是逆天而行的。”

无论如何，“在该公司产生的对FLOSS社区的全部的敌意下，他们会过河拆桥，”埃伯索尔总结道，“底线是：送礼的希腊人也很可畏——仔细留心希腊人不怀好意的礼物……”

### ‘就像猫爱上老鼠’

微软爱上Linux“就像猫爱上老鼠，”博主[罗伯特·伯格森](http://mrpogson.com/)打趣道，“当然，他们会玩玩\*/Linux，但是他们不是我们的朋友。”

所发生的事情是，FOSS和LInux社区已经击溃了“MS自从和IBM达成提供OS的交易后放置在竞争道路入口上的所有障碍，”伯格森说，“MS肯定是在绝望地试着和‘敌人’‘做朋友’，因为它们的位置被侵占了。”

“一切都会好的，”他补充道，“MS仍然可以通过愚蠢地花大量的金钱来制造麻烦，或者他们可以进行常规商业运作并在价格/性能上开展竞争。那不是‘爱’——那是接受现实。”

### 适应或者灭亡

对于微软而言，问题在于“开源开发包对于开发者而言开始变得足够好用了，”参团顾问和[Slashdot](http://slashdot.org/)博主格哈德·麦克。

“在我的最后一份职业中，大多数的程序员想要Eclipse，而不是Visual Studio，即使客户端软件是Windows专用的。用Windows做测试的开发者们迁移到Linux的数量在缓慢增长。”麦克回忆道。

“很要有人想被固定在一个平台中，因此单一平台的语言的份额会越来越少，”他补充道，“微软现在必须在适应与灭亡中作出选择。”

### 这里没有温暖的毛球

驱动此项运动的策略也在于“各种云大量地在Linux上部署，即便在微软自己的Azure云，Linux也被大量部署，”Google+博主凯文·奥布莱恩暗示道。

“纳德拉清楚地指出，他正将微软向云方向推进，因为他几乎不得不如此，以期继续将游戏玩下去。”奥布莱恩坚信。

那就是说，不管怎样，“我都不期待微软变得可爱又善意——他们将做所有他们认为能获得最佳公司利益的事情。”他说。

事实上，“根本没Linux什么事——它只和SaaS相关，也和一位并不偏执和狂热的90后CEO相关，”SoylentNews博主hairyfeet告诉Linux女孩。

“纳德拉很明智，而且意识到了编程语言的价值不在于专利或OS排他性，而在于服务和对语言的支持，”hairyfeet解释道，“考虑到这一点，越多的平台使用该语言，它就会越好，因为那会增加该语言的价值，并且为你的服务带来更多客户。”

### 帝国的没落

总得来说，一切都很明了，那就是“微软帝国正在摇摇欲坠，”Google+博主贡萨洛·维拉斯科 C说。

“我不知道，或者不关心他们为什么会说谎，说他们热爱Linux，”他补充道，“我只希望GNU/Linux社区变得比现今更聪明些（咳，Systemd，咳咳），拒绝微软.Net和其它产生影响的东西。GNU/Linux必须只用FLOSS工具。”

---

via: <http://www.linuxinsider.com/story/When-Microsoft-Went-A-Courting-81374.html>

作者：[Katherine Noyes](http://twitter.com/noyesk) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


如何在 Linux 系统中创建一个云端加密文件系统

Summary: Amazon S3 和 Google Cloud Storage 之类的商业云存储服务以能承受的价格提供了高可用性、可扩展、无限容量的对象存储服务。为了加速这些云产品的广泛采用，这些提供商为他们的产品通过明确的 API 和 SDK 培养了一个良好的开发者生态系统。而基于云的文件系统便是这些活跃的开发者社区中的典型产品，已经有了好几个开源的实现。 S3QL 便是最流行的开源云端文件系统之一。它是一个基于 FUSE 的文件系统，提供了好几个商业或开源的云存储后端，比如 Amazon S3、Google Cloud Storage、Rackspace CloudFiles，还有 OpenStack。作为一个功能完

好文章

Repost

# 如何在 Linux 系统中创建一个云端加密文件系统

[Amazon S3](http://aws.amazon.com/s3) 和 [Google Cloud Storage](http://code.google.com/apis/storage/) 之类的商业云存储服务以能承受的价格提供了高可用性、可扩展、无限容量的对象存储服务。为了加速这些云产品的广泛采用，这些提供商为他们的产品通过明确的 API 和 SDK 培养了一个良好的开发者生态系统。而基于云的文件系统便是这些活跃的开发者社区中的典型产品，已经有了好几个开源的实现。

[S3QL](https://bitbucket.org/nikratio/s3ql/) 便是最流行的开源云端文件系统之一。它是一个基于 FUSE 的文件系统，提供了好几个商业或开源的云存储后端，比如 Amazon S3、Google Cloud Storage、Rackspace CloudFiles，还有 OpenStack。作为一个功能完整的文件系统，S3QL 拥有不少强大的功能：最大 2T 的文件大小、压缩、UNIX 属性、加密、基于写入时复制的快照、不可变树、重复数据删除，以及软、硬链接支持等等。写入 S3QL 文件系统任何数据都将首先被本地压缩、加密，之后才会传输到云后端。当你试图从 S3QL 文件系统中取出内容的时候，如果它们不在本地缓存中，相应的对象会从云端下载回来，然后再即时地解密、解压缩。

需要明确的是，S3QL 的确也有它的限制。比如，你不能把同一个 S3FS 文件系统在几个不同的电脑上同时挂载，只能有一台电脑同时访问它。另外，ACL（访问控制列表）也并没有被支持。

在这篇教程中，我将会描述“如何基于 Amazon S3 用 S3QL 配置一个加密文件系统”。作为一个使用范例，我还会说明如何在挂载的 S3QL 文件系统上运行 rsync 备份工具。

### 准备工作

本教程首先需要你创建一个 [Amazon AWS 帐号](http://aws.amazon.com/)（注册是免费的，但是需要一张有效的信用卡）。

然后 [创建一个 AWS access key](http://aws.amazon.com/)（access key ID 和 secret access key），S3QL 使用这些信息来访问你的 AWS 帐号。

之后通过 AWS 管理面板访问 AWS S3，并为 S3QL 创建一个新的空 bucket。

为最佳性能考虑，请选择一个地理上距离你最近的区域。

### 在 Linux 上安装 S3QL

在大多数 Linux 发行版中都有预先编译好的 S3QL 软件包。

#### 对于 Debian、Ubuntu 或 Linux Mint：

```
$ sudo apt-get install s3ql

```

#### 对于 Fedora：

```
$ sudo yum install s3ql

```

对于 Arch Linux，使用 [AUR](https://aur.archlinux.org/packages/s3ql/)。

### 首次配置 S3QL

在 ~/.s3ql 目录中创建 autoinfo2 文件，它是 S3QL 的一个默认的配置文件。这个文件里的信息包括必须的 AWS access key，S3 bucket 名，以及加密口令。这个加密口令将被用来加密一个随机生成的主密钥，而主密钥将被用来实际地加密 S3QL 文件系统数据。

```
$ mkdir ~/.s3ql
$ vi ~/.s3ql/authinfo2

```

---

```
[s3]
storage-url: s3://[bucket-name]
backend-login: [your-access-key-id]
backend-password: [your-secret-access-key]
fs-passphrase: [your-encryption-passphrase]

```

指定的 AWS S3 bucket 需要预先通过 AWS 管理面板来创建。

为了安全起见，让 authinfo2 文件仅对你可访问。

```
$ chmod 600 ~/.s3ql/authinfo2

```

### 创建 S3QL 文件系统

现在你已经准备好可以在 AWS S3 上创建一个 S3QL 文件系统了。

使用 mkfs.s3ql 工具来创建一个新的 S3QL 文件系统。这个命令中的 bucket 名应该与 authinfo2 文件中所指定的相符。使用“--ssl”参数将强制使用 SSL 连接到后端存储服务器。默认情况下，mkfs.s3ql 命令会在 S3QL 文件系统中启用压缩和加密。

```
$ mkfs.s3ql s3://[bucket-name] --ssl

```

你会被要求输入一个加密口令。请输入你在 ~/.s3ql/autoinfo2 中通过“fs-passphrase”指定的那个口令。

如果一个新文件系统被成功创建，你将会看到这样的输出：

### 挂载 S3QL 文件系统

当你创建了一个 S3QL 文件系统之后，下一步便是要挂载它。

首先创建一个本地的挂载点，然后使用 mount.s3ql 命令来挂载 S3QL 文件系统。

```
$ mkdir ~/mnt_s3ql
$ mount.s3ql s3://[bucket-name] ~/mnt_s3ql

```

挂载一个 S3QL 文件系统不需要特权用户，只要确定你对该挂载点有写权限即可。

视情况，你可以使用“--compress”参数来指定一个压缩算法（如 lzma、bzip2、zlib）。在不指定的情况下，lzma 将被默认使用。注意如果你指定了一个自定义的压缩算法，它将只会应用到新创建的数据对象上，并不会影响已经存在的数据对象。

```
$ mount.s3ql --compress bzip2 s3://[bucket-name] ~/mnt_s3ql

```

因为性能原因，S3QL 文件系统维护了一份本地文件缓存，里面包括了最近访问的（部分或全部的）文件。你可以通过“--cachesize”和“--max-cache-entries”选项来自定义文件缓存的大小。

如果想要除你以外的用户访问一个已挂载的 S3QL 文件系统，请使用“--allow-other”选项。

如果你想通过 NFS 导出已挂载的 S3QL 文件系统到其他机器，请使用“--nfs”选项。

运行 mount.s3ql 之后，检查 S3QL 文件系统是否被成功挂载了：

```
$ df ~/mnt_s3ql
$ mount | grep s3ql

```

### 卸载 S3QL 文件系统

想要安全地卸载一个（可能含有未提交数据的）S3QL 文件系统，请使用 umount.s3ql 命令。它将会等待所有数据（包括本地文件系统缓存中的部分）成功传输到后端服务器。取决于等待写的数据的多少，这个过程可能需要一些时间。

```
$ umount.s3ql ~/mnt_s3ql

```

### 查看 S3QL 文件系统统计信息及修复 S3QL 文件系统

若要查看 S3QL 文件系统统计信息，你可以使用 s3qlstat 命令，它将会显示诸如总的数据、元数据大小、重复文件删除率和压缩率等信息。

```
$ s3qlstat ~/mnt_s3ql

```

你可以使用 fsck.s3ql 命令来检查和修复 S3QL 文件系统。与 fsck 命令类似，待检查的文件系统必须首先被卸载。

```
$ fsck.s3ql s3://[bucket-name]

```

### S3QL 使用案例：Rsync 备份

让我用一个流行的使用案例来结束这篇教程：本地文件系统备份。为此，我推荐使用 rsync 增量备份工具，特别是因为 S3QL 提供了一个 rsync 的封装脚本（/usr/lib/s3ql/pcp.py）。这个脚本允许你使用多个 rsync 进程递归地复制目录树到 S3QL 目标。

```
$ /usr/lib/s3ql/pcp.py -h

```

下面这个命令将会使用 4 个并发的 rsync 连接来备份 ~/Documents 里的所有内容到一个 S3QL 文件系统。

```
 $ /usr/lib/s3ql/pcp.py -a --quiet --processes=4 ~/Documents ~/mnt_s3ql

```

这些文件将首先被复制到本地文件缓存中，然后在后台再逐步地同步到后端服务器。

若想了解与 S3QL 有关的更多信息，如自动挂载、快照、不可变树，我强烈推荐阅读 [官方用户指南](http://www.rath.org/s3ql-docs/)。欢迎告诉我你对 S3QL 怎么看，以及你对任何其他工具的使用经验。

---

via: <http://xmodulo.com/2014/09/create-cloud-based-encrypted-file-system-linux.html>

作者：[Dan Nanni](http://xmodulo.com/author/nanni) 译者：[felixonmars](https://github.com/felixonmars) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


怎么样称得上是Linux下优秀的命令行计算器

Summary: 每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序。不过如果你的工作区中全是命令行窗口，那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题。或许你在寻找一款基于命令行的计算器程序。如果是这样的话，GNU bc（basic calculator的缩写）会是你不二的选择。当然Linux下有很多基于命令行的计算器应用，我认为GNU bc是功能最强大和最有用的。 在GNU时代之前，bc实际上是一个著名的精密计算语言。它的诞生要追溯到70年代的Unix时期了。最初bc作为一个语法和C语言相似的编程语言而著名。随着时间的改变，最开始的b

用Python当计算器用好了。

不会写python 只会用python 解释器下做加减法的捂脸飘过[拍砖][互相拍砖]

python足矣

irb//@Murakumo叢雲: 转发微博

irb //@人家要变成奶酪了:irb//@Murakumo叢雲: 转发微博

@我的印象笔记

我是用perl//@西安气象爱好者:用Python当计算器用好了。

sympy巨爽//@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。

我说一个笑话，现在还有人用perl[哈哈] 是不是很黑？//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。

一直用python//@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。

看来bc好强大，以前还用PHP，MySQL呢，得h改行了。 //@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。

烧死perl→_→//@Linux中国:我是用perl//@西安气象爱好者:用Python当计算器用好了。

bc确实不错，可惜以前不会玩

@有道云笔记收藏

对我来说，bc就足够应付了。

我直接用Matlab，M语言算不算？

我一般用scheme //@西瓜大丸子汤:bc太难用了，pythonpy， pyeval， pyli这几个基于python的命令行工具好多了

Linux中国:【怎么样称得上是Linux下优秀的命令行计算器 | 每个现代的......】

python大法好//@Linux中国: 好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。

很不错哦，以前就关注到了bc，当时一个很困惑的地方就在于，默认情况下，计算结果的小数位数为０，而我一时也找不到在哪里调，简单翻了下man手册，写的太啰嗦咯，木有耐心的我就木有看完，现在可好咯，原来只要简单的使用一下scale=xx就可以咯．很不错．一个很有用的命令行计算工具．个人感觉比python用起来简单多咯，而且用起来更像计算器的感觉嘛

作为命令行控，这个得转//@西瓜大丸子汤: bc太难用了，pythonpy， pyeval， pyli这几个基于python的命令行工具好多了

用ruby也行啊~//@Linux中国:好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。

不错不错，很强大

当然用js，任何平台浏览器F12就有输入框，全世界最方便的输入方式 //@Linux中国:好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用pe

一般都用python//@Linux中国:好吧，各路语言都出来秀秀吧[汗]//@挨弹腿踢梁昌泰:awk也轻松搞定。awk 'BEGIN{print 1.1*1.01}'//@Linux中国://@farseerfc:簡單的用echo $((exp))，複雜一點用bc，再複雜一點用ipython notebook//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。

我才不会告你你们我的计算机叫Macaulay2呢[哈哈]//@Linux中国: 我是用perl//@西安气象爱好者:用Python当计算器用好了。

# 怎么样称得上是Linux下优秀的命令行计算器

每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序。不过如果你的工作区中全是命令行窗口，那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题。或许你在寻找一款基于命令行的计算器程序。如果是这样的话，[GNU bc](http://www.gnu.org/software/bc/)（“basic calculator”的缩写）会是你不二的选择。当然Linux下有很多基于命令行的计算器应用，我认为GNU bc是功能最强大和最有用的。

在GNU时代之前，bc实际上是一个著名的精密计算语言。它的诞生要追溯到70年代的Unix时期了。最初bc作为一个语法和C语言相似的编程语言而著名。随着时间的改变，最开始的bc演化成POSIX bc，最后变成了今天的GNU bc。

### GNU bc的特性

现在的GNU bc是早期bc经过若干次改进和功能增强的结果。目前它被所有的主流GNU/Linux发行版所收纳。GNU bc支持高精度数字和多种数值类型（例如二进制、十进制、十六进制）的输入输出。

如果你对C语言很熟悉的话，你会发现bc使用了和C语言一样或相似的算术操作符。所支持的操作符包括算术运算符（+, -, \*, /, %, ++, --）、比较运算符（<, >, ==, !=, <=, >=）、逻辑运算符（!, &&, ||）、位运算符（&, |,  , ~, <<, >>）和复合赋值运算符（+=, -=, \*=, /=, %=, &=, |=,  =, &&=, ||=, <<=, >>=）。bc内置了很多有用的函数，像是平方根、正弦、余弦、反正弦、自然对数、指数等。

### 如何使用GNU bc

作为一个基于命令行的计算器，GNU bc的使用没有限制。在本文中，我会向大家介绍bc命令的几个常用的特性。如果你想要更加详细的指导，你可以查阅[官方指南](https://www.gnu.org/software/bc/manual/bc.html)。

如果你没有一个预先写好的bc脚本，那么你可以在交互模式下运行bc。在这种模式下，你输入的以回车结束的任何声明或者表达式会被立刻计算出结果。你需要输入以下命令来进入bc的交互界面。如果想退出bc，你可以输入'quit'并且按回车。

```
$ bc

```

本文下面展示的例子请在bc交互界面中输入。

### 输入表达式

如果想要计算一个算术表达式，我们可以在闪烁的光标处输入该表达式，然后按回车确认。你也可以将该结果存储到一个变量中，然后在其他表达式中使用该变量。

在一个bc的交互界面中，保存着没有个数限制的命令历史记录。使用上方向键来查看之前输入的命令。如果你想限制历史记录保存的命令数量，你可以将一个名为history的特殊变量设置成你希望的数值。该变量默认为-1，也就是“历史记录数量没有限制”。

### 输入输出进制切换

经常会发生的是，你输入一个表达式并且想使用二进制或者十六进制来显示结果。bc允许你在输入输出数字的进制间转换。输入和输出的数系基分别存储在ibase和obase变量中，默认值为10，有效的数值是2到16（或者环境变量BC*BASE*MAX的值）。你只需要更改ibase和obase的值就可以在不同进制之间转换了。下面是一个求两个十六进制/二进制数和的例子：

需要注意的是，我有意地将obase=16放到了ibase=16前面，**反过来则是不可以的**。这个是因为如果我先输入ibase=16，那么随后输入的obase=16中的16会被认为是16进制的数字，也就是十进制的22。当然这个不是我们所期望的。

### 调整精度

在bc中，数字的精度存储在一个名为scale的特殊变量中。该变量表示小数点后数字的个数。scale默认为0，意味着所有的数字和结果以整数形式储存。你可以通过改变scale这个特殊变量的值，来调整数值的精度。

```
scale=4

```

### 使用内置函数

除了简单的算术操作符，GNU bc还通过外部的数学函数库来提供许多高级的数学函数。你可以在命令行界面使用“-l”选项来打开bc。

这里描述了一些内置的函数。

N的二次方根：

```
 sqrt(N)

```

X的正弦（X是弧度）：

```
s(X)

```

X的余弦（X是弧度）：

```
c(X)

```

X的反正弦（返回值是弧度）：

```
a(X)

```

X的自然对数：

```
l(X)

```

X的指数对数：

```
e(X)

```

### 当做语言来用

作为一个计算语言，GNU bc支持简单的声明（变量赋值、中断、返回等）、复合语句（if、while、for loop等）和自定义函数。在这里我不会涉及到这些特性的细节，不过你可以通过[官方指南](https://www.gnu.org/software/bc/manual/bc.html)来学习如何使用这些特性。下面是一个简单的函数示例：

```
define dummy(x){
return(x * x);
}
dummy(9)
81
dummy(4)
16

```

### 在非交互界面下使用GNU bc

到目前为止，我们一直在交互界面下使用bc。不过更加流行的使用bc的方法是在没有交互界面的脚本中运行bc。这种情况下，你可以使用echo命令并且借助管道来向bc发送输入内容。例如：

```
$ echo "40*5" | bc
$ echo "scale=4; 10/3" | bc
$ echo "obase=16; ibase=2; 11101101101100010" | bc

```

总结一下，GNU bc是一款强大并且通用的基于命令行的计算器应用，它绝对不会让你失望。它预装在所有的现代Linux发行版中，bc可以让你不用离开命令行就可以进行高效的数学计算。所以，GNU bc一定会是你的最爱。

---

via: <http://xmodulo.com/command-line-calculator-linux.html>

作者：[Dan Nanni](http://xmodulo.com/author/nanni) 译者：[JonathanKang](https://github.com/JonathanKang) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


在Linux中的使用 ss 命令检查套接字/网络连接

Summary: ss是iproute2包的一部分（控制TCP/IP网络和流量的工具）。iproute2的目标是替代先前用于配置网络接口、路由表和管理ARP表的标准Unix网络工具套装（通常称之为net-tools）。ss工具用于导出套接字统计，它可以显示与netstat类似的信息，且可以显示更多的TCP和状态信息。因为它直接从内核空间获取信息，所以会更快。ss的操作和netstat很像，所以这让它可以很容易就可以取代netstat。  使用和常见选项 ss和netstat很像，默认它会显示已经建立连接的开放的非监听TCP套接字列表。并且你可以用下面的选项过滤输出：  -n - 不要尝试解析服务名。 -

怎么弄的和JJ怪一样//@相公12345:转发微博

转发一下子

@我的印象笔记

@ztech

# 在Linux中的使用 ss 命令检查套接字/网络连接

ss是iproute2包的一部分（控制TCP/IP网络和流量的工具）。iproute2的目标是替代先前用于配置网络接口、路由表和管理ARP表的标准Unix网络工具套装（通常称之为“net-tools”）。ss工具用于导出套接字统计，它可以显示与netstat类似的信息，且可以显示更多的TCP和状态信息。因为它直接从内核空间获取信息，所以会更快。ss的操作和netstat很像，所以这让它可以很容易就可以取代netstat。

### 使用和常见选项

ss和netstat很像，默认它会显示已经建立连接的开放的非监听TCP套接字列表。并且你可以用下面的选项过滤输出：

* **-n** - 不要尝试解析服务名。
* **-r** - 尝试解析数字的地址/端口。
* **-a** - 显示所有套接字。
* **-l** - 显示监听套接字。
* **-p** - 显示使用该套接字的进程。
* **-s** - 打印统计数据
* **-t** - 只显示TCP套接字。
* **-u** - 只显示UDP套接字。
* **-d** - 只显示DCCP套接字
* **-w** - 只显示RAW套接字。
* **-x** - 只显示Unix域套接字
* **-f FAMILY** - 显示FAMILY套接字的类型。目前支持下面这些族：unix、inet、inet6、link、netlink。
* **-A QUERY** - 指定要列出的套接字列表，通过逗号分隔。可以识别下面的标识符：all、inet、tcp、udp、raw、unix、packet、netlink、unix*dgram、unix*stream、packet*raw、packet*dgram。
* **-o STATUS** - 列出指定状态的套接字

### ss 命令示例

**1.** 显示所有的的TCP端口和使用它们的进程：

```
# ss -tnap

```

**2.** 你可以使用-4 标志来显示IPv4链接，-6标志来显示IPv6链接，比如：

```
# ss -tnap6

```

**3.** 跟上面的行为一样，你只需用u代替t就会显示所有开放的UDP端口。

```
# ss -unap

```

**4.** 你可以使用-s标志来打印各种有用的统计数据：

```
# ss -s

```

**5.** 你可以使用-o标志来检查所有不同状态下的链接，比如显示所有已经建立的连接。

```
# ss -tn -o state established -p

```

---

via: <http://linoxide.com/linux-command/ss-sockets-network-connection/>

作者：[Adrian Dinu](http://linoxide.com/author/adriand/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


Linux 有问必答：在Linux上如何将文本文件转换成PDF格式

Summary: 提问： 我想要将一个纯文本文件转换成PDF文档。在Linux命令行下是否有一个简单的方法将文本文件转换成PDF文件？ 答：当你有一大堆文本文件要维护的时候，把它们转换成PDF文档会好一些。比如，PDF更适合打印，因为PDF文档有预定义布局。除此之外，还可以减少文档被意外修改的风险。

涨姿势

opensuse是不是用的人比较少？里面没有讲到它。诶

1.不支持中文<br />
2.不支持word

来自 - 北京北京师范大学 的 Chrome/Linux 用户

直接pandoc不就搞定了，各种转

马克

好工具

get√[馋嘴]

明天试试可不可以把doc转换成pdf

其实用a2ps把文件弄成ps，再用ps2pdf也一样！

正版Word里有把文件保存为PDF格式的功能！

怎么会乱码呢？

# Linux 有问必答：在Linux上如何将文本文件转换成PDF格式

>
> **提问**： 我想要将一个纯文本文件转换成PDF文档。在Linux命令行下是否有一个简单的方法将文本文件转换成PDF文件？
>
>
>

<img src="content_image/album_201412_04_213944vnp7iipw0i8n6jin.png" alt="" title="">

当你有一大堆文本文件要维护的时候，把它们转换成PDF文档会好一些。比如，PDF更适合打印，因为PDF文档有预定义布局。除此之外，还可以减少文档被意外修改的风险。

要将文本文件转换成PDF格式，你要按照下面的两步。

### 准备工作

首先你要安装两个需要的包。

在 Debian、Ubuntu 或者 Linux Mint上：

```
$ sudo apt-get install enscript ghostscript

```

在 Fedora、CentOS/RHEL上：

```
$ sudo yum install enscript ghostscript

```

在 Arch Linux上：

```
$ sudo pacman -S enscript ghostscript

```

### 将文本文件转换成PDF格式

准备工作完成之后，按照下面的两步从文本文件生成一个PDF文件

首先，使用enscript命令行工具将文本文件转换成postscript格式。

```
$ enscript -p output.ps input.txt

```

最后将postscript格式文件转换成PDF文件。

```
$ ps2pdf output.ps output.pdf

```

---

via: <http://ask.xmodulo.com/convert-text-to-pdf-linux.html>

译者：[geekpi](https://github.com/geekpi) 校对：[Caroline](https://github.com/carolinewuyan)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


如何让树莓派默认启动进入图形界面

Summary:
我买树莓派已经有一段时间了，但是实话说我几乎还没有用它做过什么事情。自从我的Dell超级本送到Dell服务中心后（已经有数星期了），我再次开始使用树莓派作为替代。

我之前已经写过一篇在Ubuntu中如何在SD卡上安装Raspbian系统。我也重装了一次树莓派。第一次启动的时候我漏掉了一件事情就是设置图形界面。这样当我再次启动树莓派的时候，我直接进入了命令行。我该接下来如何运行Respbian图形界面呢？

树莓派能poe供电么？

@IM-哈哈毅很没用

@我的印象笔记

无爱了

有KDE吗？

回复@凡人自有烦人事:然后呢

图形界面下，打开个网页也要等半天，CPU100%啊

# 如何让树莓派默认启动进入图形界面

<img src="content_image/album_201412_04_180711w33nl98zxhlfb9tt.jpg" alt="" title="">

我买树莓派已经有一段时间了，但是实话说我几乎还没有用它做过什么事情。自从我的Dell超级本送到Dell服务中心后（已经有数星期了），我再次开始使用树莓派作为替代。

我之前已经写过一篇[在Ubuntu中如何在SD卡上安装Raspbian系统](http://itsfoss.com/tutorial-how-to-install-raspberry-pi-os-raspbian-wheezy/)。我也重装了一次树莓派。第一次启动的时候我漏掉了一件事情就是设置图形界面。这样当我再次启动树莓派的时候，我直接进入了命令行。我该接下来如何运行Respbian图形界面呢？

### 设置Raspbian图形启动

当你第一次安装Raspbian系统时，确实有一些选项需要你来配置，由于匆忙，我没有注意到这些，只是快速完成屏幕上的选项。如果你遇到了和我一样的情况，最终只是进入到了Raspbian操作系统的命令行界面，不要失望，因为设置树莓派以图形界面启动很容易。让我们看看该如何操作。

### 第一步:

当你在命令行时，以默认的用户名和密码登录（如果你没有修改过）。Raspbian的默认用户是pi，默认密码应该是raspberry。

#### 第二步:

当你登录后，运行下面的命令：

```
sudo raspi-config

```

这条命令会打开树莓派的配置，就像我们第一次启动看到的那样。

#### 第三步:

在这个配置界面下， 寻找**Enable Boot to Desktop/Scratch**这个选项。用箭头、tab和/或者回车键的组合来选中它（我忘记使用的是哪些了）。

[](https://camo.githubusercontent.com/08feeaed840a5e0a3105aa90ad66c5b22e53fa74/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f526173706269616e5f4775695f73657475702e6a7067)

#### 第四步:

下一屏中，选择 **Desktop Login as user ‘Pi’ at the graphical desktop.**

[](https://camo.githubusercontent.com/693560632b9980e6bb51c8d1d51a46332a6e5c6f/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f526173706269616e5f4775695f73657475705f312e6a7067)

#### 第五步:

接下来你会被要求重启。

[](https://camo.githubusercontent.com/8b06681a02fd1935ecddc009250b536fb172b10d/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f526173706269616e5f4775695f73657475705f322e6a7067)

下次启动后，你会登录到LXDE桌面环境。接下来你就可以享受树莓派的图形界面了。

[](https://camo.githubusercontent.com/75e996d8394b067582d0a8a31c8ea194ffdc8e2f/687474703a2f2f697473666f73732e697473666f73732e6e6574646e612d63646e2e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031342f31312f726173706269616e2d77656c636f6d652d73637265656e2d6775692e6a706567)

我希望这个教程能够帮助设置你的树莓派默认启动进入图形界面。欢迎在评论区留下你的问题和建议。

---

via: <http://itsfoss.com/raspberry-pi-gui-boot/>

作者：[Abhishek](http://itsfoss.com/author/Abhishek/) 译者：[geekpi](https://github.com/geekpi) 校对：[Caroline](https://github.com/carolinewuyan)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


如何创建和使用Python CGI脚本

Summary: 你是否想使用Python语言创建一个网页，或者处理用户从web表单输入的数据？这些任务可以通过Python CGI(公用网关接口)脚本以及一个Apache web服务器实现。当用户请求一个指定URL或者和网页交互(比如点击""提交"按钮)的时候，CGI脚本就会被web服务器启用。CGI脚本调用执行完毕后，它的输出结果就会被web服务器用来创建显示给用户的网页。  配置Apache web服务器，让其能运行CGI脚本 在这个教程里，我们假设Apache web服务器已经安装好，并已运行。这篇教程使用的Apache web服务器(版本2.2.15，用于CentOS发行版6.5)运行在本地主机(127.0.0.1

@mark

嘛

好强大

# 如何创建和使用Python CGI脚本

你是否想使用Python语言创建一个网页，或者处理用户从web表单输入的数据？这些任务可以通过Python CGI(公用网关接口)脚本以及一个Apache web服务器实现。当用户请求一个指定URL或者和网页交互(比如点击""提交"按钮)的时候，CGI脚本就会被web服务器启用。CGI脚本调用执行完毕后，它的输出结果就会被web服务器用来创建显示给用户的网页。

### 配置Apache web服务器，让其能运行CGI脚本

在这个教程里，我们假设Apache web服务器已经安装好，并已运行。这篇教程使用的Apache web服务器(版本2.2.15，用于CentOS发行版6.5)运行在本地主机(127.0.0.1)，并且监听80端口，如下面的Apache指令指定一样：

```
ServerName 127.0.0.1:80
Listen 80

```

下面举例中的HTML文件存放在web服务器上的/var/www/html目录下，并通过DocumentRoot指令指定(指定网页文件所在目录)：

```
DocumentRoot "/var/www/html"

```

现在尝试请求URL：http://localhost/page1.html

这将返回web服务器中下面文件的内容：

```
/var/www/html/page1.html

```

为了启用CGI脚本，我们必须指定CGI脚本在web服务器上的位置，需要用到ScriptAlias指令：

```
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

```

以上指令表明CGI脚本保存在web服务器的/var/www/cgi-bin目录，请求URL里包含/cgi-bin/的将会搜索这个目录下的CGI脚本。

我们必须还要明确CGI脚本在/var/www/cgi-bin目录下有执行权限，还要指定CGI脚本的文件扩展名。使用下面的指令：

```
<Directory "/var/www/cgi-bin">
    Options +ExecCGI
    AddHandler cgi-script .py
</Directory>

```

下面访问URL：http://localhost/cgi-bin/myscript-1.py

这将会调用web服务器中下面所示脚本：

```
/var/www/cgi-bin/myscript-1.py

```

### 创建一个CGI脚本

在创建一个Python CGI脚本之前，你需要确认你已经安装了Python(这通常是默认安装的，但是安装版本可能会有所不同)。本篇教程使用的脚本是使用Python版本2.6.6编写的。你可以通过下面任意一命令(-V和--version参数将显示所安装Python的版本号)检查Python的版本。

```
$ python -V
$ python --version

```

如果你的Python CGI脚本要用来处理用户输入的数据(从一个web输入表单)，那么你将需要导入Python cgi模块。这个模块可以处理用户通过web输入表单输入的数据。你可以在你的脚本中通过下面的语句导入该脚本：

```
import cgi

```

你也必须修改Python CGI脚本的执行权限，以防止web服务器不能调用。可以通过下面的命令增加执行权限：

```
# chmod o+x myscript-1.py

```

### Python CGI例子

涉及到Python CGI脚本的两个方案将会在下面讲述：

* 使用Python脚本创建一个网页
* 读取并显示用户输入的数据，并且在网页上显示结果

注意：Python cgi模块在方案2中是必需的，因为这涉及到用户从web表单输入数据。

### 例子1 ：使用Python脚本创建一个网页

对于这个方案，我们将通过创建包含一个单一提交按钮的网页/var/www/html/page1.html开始。

```
<html>
<h1>Test Page 1</h1>
<form name="input" action="/cgi-bin/myscript-1.py" method="get">
<input type="submit" value="Submit">
</form>
</html>

```

当"提交"按钮被点击，/var/www/cgi-bin/myscript-1.py脚本将被调用(通过action参数指定)。通过设置方法参数为"get"来指定一个"GET"请求，服务器将会返回指定的网页。/var/www/html/page1.html在浏览器中的显示情况如下：

/var/www/cgi-bin/myscript-1.py的内容如下：

```
#!/usr/bin/python
print "Content-Type: text/html"
print ""
print "<html>"
print "<h2>CGI Script Output</h2>"
print "<p>This page was generated by a Python CGI script.</p>"
print "</html>"

```

第一行声明表示这是使用 /usr/bin/python命令运行的Python脚本。"Content-Type: text/html"打印语句是必需的，这是为了让web服务器知道接受自CGI脚本的输出类型。其余的语句用来输出HTML格式的其余网页内容。

当"Submit"按钮点击，下面的网页将返回：

这个例子的要点是你可以决定哪些信息可以被CGI脚本返回。这可能包括日志文件的内容，当前登陆用户的列表，或者今天的日期。在你处理时拥有所有python库的可能性是无穷无尽的。

### 例子2：读取并显示用户输入的数据，并将结果显示在网页上

对于这个方案，我们将通过创建一个含有三个输入域和一个提交按钮的网页/var/www/html/page2.html开始。

```
<html>
<h1>Test Page 2</h1>
<form name="input" action="/cgi-bin/myscript-2.py" method="get">
First Name: <input type="text" name="firstName"><br>
Last Name: <input type="text" name="lastName"><br>
Position: <input type="text" name="position"><br>
<input type="submit" value="Submit">
</form>
</html>

```

当"Submit"按钮点击，/var/www/cgi-bin/myscript-2.py脚本将被执行(通过action参数指定)。/var/www//html/page2.html显示在web浏览器中的图片如下所示(注意，三个输入域已经被填写好了)：

/var/www/cgi-bin/myscript-2.py的内容如下：

```
#!/usr/bin/python
import cgi
form = cgi.FieldStorage()
print "Content-Type: text/html"
print ""
print "<html>"
print "<h2>CGI Script Output</h2>"
print "<p>"
print "The user entered data are:<br>"
print "<b>First Name:</b> " + form["firstName"].value + "<br>"
print "<b>Last Name:</b> " + form["lastName"].value + "<br>"
print "<b>Position:</b> " + form["position"].value + "<br>"
print "</p>"
print "</html>"

```

正如前面提到，import cgi语句用来确保能够处理用户通过web输入表单输入的数据。web输入表单被封装在一个表单对象中，叫做cgi.FieldStorage对象。一旦开始输出，"Content-Type: text/html"是必需的，因为web服务器需要知道接受自CGI脚本的输出格式。用户输入的数据在包含form["firstName"].value，form["lastName"].value，和 form["position"].value的语句中可以得到。那些中括号中的名称和**/var/www/html/page2.html**文本输入域中定义的名称参数一致。

当网页上的"Submit"按钮被点击，下面的网页将被返回。

这个例子的要点就是你可以很容易地读取并显示用户在web表单上输入的数据。除了以字符串的方式处理数据，你也可以用Python将用户输入的数据转化为可用于数值计算的数字。

### 结论

本教程演示了如何使用Python CGI脚本创建网页并处理用户在网页表单输入的数据。查阅更多关于Apache CGI脚本的信息，点击[这里](http://httpd.apache.org/docs/2.2/howto/cgi.html)。查阅更多关于Python cgi模块的信息，点击[这里](https://docs.python.org/2/library/cgi.html#module-cgi)。

---

via: <http://xmodulo.com/create-use-python-cgi-scripts.html>

作者：[Joshua Reed](http://xmodulo.com/author/joshua) 译者：[su-kaiyao](https://github.com/su-kaiyao) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


使用 GnuPG 加密签名来验证下载文件的可靠性和完整性

Summary: 当你从网上下载一个文件后（比如：安装程序、ISO镜像或者一个压缩包），文件可能在不同的情况下发生了损坏，比如：由于线路传输错误、中断的下载、存储硬件错误、文件系统错误等等。除了这些错误，文件还可能在下载前或者下载中的攻击而被有意地篡改了。比如，一个攻破证书颁发机构的攻击者可以实施一个MITM攻击（中间人攻击），欺骗你从HTTPS网站上下载隐藏恶意软件的文件。 要保护你自己免受这些问题的困扰，建议你去验证从网上下载的文件的可靠性和完整性。特别是你下载了一个非常敏感的文件的时候）（比如：操作系统镜像、二进制应用

感谢


CentOS Linux 7 发布滚动构建版

Summary: CentOS上周五宣布，CentOS Linux 的滚动构建版正式发布！这次发布包括了用于安装介质的CentOS Linux 7 的 ISO和通用的云镜像两种版本。 CentOS Linux 滚动构建版包括了从初始发布时到快照发布之间推送到 mirror.centos.org的所有更新。这些更新包括了 CentOS Linux 的安全更新、错误修复、功能增强以及常规更新。使用这个版本安装的机器将包括之前所有已经发布的更新，和使用 yum 更新的没有什么不同。所有的 rpm/yum 库仍旧存储在 mirror.centos.org上，位置和内容都没有变化。 我们将在每个月底前发布一个滚动更新版本。每个发布版本的

印象中sl也有滚动更新的版本

Repost

【CentOS Linux 7 发布滚动构建版 】

求 iso downloading url

7变动不少

出现类似心脏流血、破壳漏洞和狮子狗等重大安全漏洞时尽快提供解决方案不是打补丁吗，没有必要把系统重装一遍吧

1、你可以用滚动更新版本的 ISO来离线更新；2、新安装的会尽快得到更新的补丁，而不用安装完之后再更新。

不懂什么是滚动构建版

就像debian那样，debian7、debian7.1、debian7.2、debian7.3、debian7.4、debian7.5、debian7.6、debian7.7……

centos 7来了

root 密码多少

木有，需要你安装时设置啊。

# CentOS Linux 7 发布滚动构建版

CentOS上周五宣布，CentOS Linux 的滚动构建版正式发布！这次发布包括了用于安装介质的CentOS Linux 7 的 ISO和通用的云镜像两种版本。

CentOS Linux 滚动构建版包括了从初始发布时到快照发布之间推送到 [mirror.centos.org](http://mirror.centos.org) 的所有更新。这些更新包括了 CentOS Linux 的安全更新、错误修复、功能增强以及常规更新。使用这个版本安装的机器将包括之前所有已经发布的更新，和使用 yum 更新的没有什么不同。所有的 rpm/yum 库仍旧存储在 [mirror.centos.org](http://mirror.centos.org) 上，位置和内容都没有变化。

我们将在每个月底前发布一个滚动更新版本。每个发布版本的名字都包括一个时间戳和用于区分所包括内容的构建标记。如 20141129\_02 的文件名表示它包括了发布在 [mirror.centos.org](http://mirror.centos.org) 上的截止到 2014年11月29日在内的所有内容，而且是滚动周期中的第二次构建。所有的构建版本都会公开发布到 [buildlogs.centos.org/](http://buildlogs.centos.org/) 上，但是只有通过了 QA 和测试的才会标记为“发布”，并放到 [buildlogs.centos.org/rolling/](http://buildlogs.centos.org/rolling/) 下。我们也会在需要时（用于开发和测试）在不同的时间点上构建临时构建版本，这些临时构建版本不会当成通用发布版本，但是仍然可以公开得到。

因为需要测试这些镜像，所以这些版本的发布时间总是和它们的时间戳（及内容截止时间）有点延迟。我们希望尽可能的自动化这个过程来缩短这个时间差，但是终究还需要一点时间。

每个滚动周期，我们都希望能以滚动方式增加更多的内容。在紧接着的下一个周期（2014/12）我们会发布 CentOS Linux 7 的 Live 镜像的滚动构建版本，然后是 CentOS Linux 6的。

现在我们没有计划在这个滚动发行周期中包括 CentOS 5。

为了便于统一和交流，发布的介质将以其所包括的内容时间为标识，而不是以发布的时间为准。比如这次在12月发布的是2014/11月底的滚动构建版本。

其它的镜像，如容器及厂商特定的镜像，将和主 CentOS Linux 介质的滚动周期同步开始，不过如果需要的话，也许会迭代的更快。特别兴趣小组（Special Interest Groups - <http://wiki.centos.org/SpecialInterestGroup>
）也希望让他们的介质和安装器的发布尽量与滚动时间线同步。

最后，我要强调的是，**滚动发行版可以在出现类似心脏流血、破壳漏洞和狮子狗等重大安全漏洞时尽快提供解决方案**。

<img src="content_image/album_201407_09_104559risei9g95hrarm1e.png" alt="" title="">

---

### CentOS Linux 发行版安装介质:

文件： CentOS-7-x86\_64-DVD-20141129\_02.iso
Sha256校验： 85a46c62b5bfc701678bef7854bb73af4ccfb840dfcbfb2f9b2189e08fe9438c

文件： CentOS-7-x86\_64-Everything-20141129\_02.iso
Sha256校验： f9fdd8b12c9529a1e3bf7628ebee964b2aeb9fd66540de7b369e0fde6f7a4236

文件： CentOS-7-x86\_64-Minimal-20141129\_02.iso
Sha256校验：e1338d13178f1c66c17386b7ced0b1459c677ff9a1cf095ac4db377234cc03fa

以下符号链接总是指向最新的滚动发行版本：

<http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-DVD.iso>
- -> CentOS-7-x86\_64-DVD-20141129\_02.iso

<http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-Everything.iso>
- -> CentOS-7-x86\_64-Everything-20141129\_02.iso

<http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-Minimal.iso>- -> CentOS-7-x86\_64-Minimal-20141129\_02.iso

每次测试通过并发布后，这些符号链接都会指向到最新的滚动发行版本。

### 云和实例镜像：

CentOS Linux 7 通用云镜像包括了 Extras/ 库中的云初始化部分。这个镜像有多种格式及不同的内容。云镜像发布在： <http://cloud.centos.org/centos/7/images/>

文件： CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2
描述：这是一个基准镜像。
大小： 944 MB
Sha256校验： 7710ffdd497cf00fc72c22a3fa7cc7adb3424d3542521ca8fbe19eba9ded403f

文件： CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2c
描述：和上面的镜像内容一样，但是通过qemu qcow2 内部压缩设置运行，适合于开发和测试，它的 I/O 性能较低，所以不适合在产品环境中使用。
大小： 399MB
Sha256校验：db42e4fb9565e75f0acbe6b54a5b8822f3f1e9783fb1a553e1552c72ceaff8df

文件： CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2.xz
描述：这是一个标准的 qcow2 文件，通过 xz 压缩工具运行，适合于产品环境中使用。
大小： 266MB
Sha256校验：9b0b38c48a24164c15c33625972b87835501b6994c3ee894f6b79ce40e7d5e54

文件： CentOS-7-x86\_64-GenericCloud-20141129\_01.raw
描述： 这是一个原始格式的文件，没有使用 qcow2 镜像格式。它可以用“qemu-img convert”转换成其它的格式。
大小： 8GB.
Sha256校验：2e643310bdb3cda775905408dbfe378a5eed04e91db193165178afc5ed5492b8

以下符号链接总是指向最新的滚动发行版本：

<http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2>
- -> CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2
<http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2c>
- -> CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2c
<http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2.xz>
- -> CentOS-7-x86\_64-GenericCloud-20141129\_01.qcow2.xz
<http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.raw>
- -> CentOS-7-x86\_64-GenericCloud-20141129\_01.raw

每次测试通过并发布后，这些符号链接都会指向到最新的滚动发行版本。

更多的信息请加入我们的 centos-devel 邮件列表（ <http://lists.centos.org/> ）。


Ubuntu 14.10 ‘乌托邦的独角兽’官方 T 恤开始发售

Summary: Ubuntu 14.10 发布以来，很少能见到随同发布的带有官方吉祥物的 T 恤。不过今天 Canonical 商店终于上架了这件粉丝喜欢的商品。 现在有两种T恤，一种是dusk blue（男士版本）或者hot pink（女士版本），但是审美与设计的形式是相同的。每种T恤印有由Canonical定制设计的折纸型的乌托邦的独角兽。每件衬衫的背面是Ubuntu的标识以及含有Utopic Unicorn 14.10文字，从前到后帮你推广系统-我喜欢！  男士的尺寸有从S到XXL， 女士的尺寸有8-10与14-16，每件T恤在英国的价格是11，美国的价格是$17.45，欧洲的价格是$17.45。这个价格较往年高一点

顺带问问，穿上这件T是不是就能控制浮游炮了→_→

啥时候linuxcn或lctt也出个tshirt[嘻嘻]

→_→想买Arch的//@但丁不淡定: 顺带问问，穿上这件T是不是就能控制浮游炮了→_→

# Ubuntu 14.10 ‘乌托邦的独角兽’官方 T 恤开始发售

**Ubuntu 14.10 发布以来，很少能见到随同发布的带有官方吉祥物的 T 恤。不过今天 Canonical 商店终于上架了这件粉丝喜欢的商品。**

现在有两种T恤，一种是‘dusk blue’（男士版本）或者‘hot pink’（女士版本），但是审美与设计的形式是相同的。每种T恤印有由Canonical定制设计的折纸型的‘乌托邦的独角兽’。每件衬衫的背面是Ubuntu的标识以及含有“Utopic Unicorn 14.10”文字，从前到后帮你推广系统-我喜欢！

男士的尺寸有从S到XXL， 女士的尺寸有8-10与14-16，每件T恤在英国的价格是£11，美国的价格是$17.45，欧洲的价格是$17.45。这个价格较往年高一点，与以往一样这是不包括运费和包装费用的价格。

* [购买男士的 Ubuntu 14.10 T恤](http://shop.canonical.com/product_info.php?products_id=1153)
* [购买女士的 Ubuntu 14.10 T恤](http://shop.canonical.com/product_info.php?products_id=1159)

吉祥物 T 恤已经成为自Ubuntu 8.04 Hardy Heron后每个Ubuntu版本发布的传统，虽然它一般在系统发布前发布。

如果你不是特定版本的粉丝，你会发现可以购买的老版本吉祥物商品的数量有限且降价出售。如果你想在你的衬衫上印一条蝾螈，推广穿山甲或者塔尔羊，可以在[出售页面](http://shop.canonical.com/index.php?cPath=29)看看。

---

via: <http://www.omgubuntu.co.uk/2014/12/last-ubuntu-14-10-unicorn-t-shirts-now-available>

作者：[Joey-Elijah Sneddon](https://plus.google.com/117485690627814051450/?rel=author) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


如何在 Linux 中使用屏幕键盘

Summary: 屏幕键盘可以作为实体键盘输入的替代方案。在某些时候，屏幕键盘显得非常需要。 比如， 你的键盘刚好坏了；你的机器太多，没有足够的键盘；你的机器没有多余的接口来连接键盘；你是个残疾人，打字有困难；或者你正在组建基于触摸屏的信息服务站。 屏幕键盘也可以作为一种防范实体键盘记录器的保护手段，键盘记录器会悄悄记录按键来获取密码等敏感信息。一些网上银行页面实际上会强制你使用屏幕键盘来增强交易的安全性。 在 linux 中有几个可用的开源键盘软件， 比如 GOK (Gnome 的屏幕键盘)，kvkbd，onboard，Florence。 我会在这个教程中

长知识

# 如何在 Linux 中使用屏幕键盘

屏幕键盘可以作为实体键盘输入的替代方案。在某些时候，屏幕键盘显得非常需要。 比如， 你的键盘刚好坏了；你的机器太多，没有足够的键盘；你的机器没有多余的接口来连接键盘；你是个残疾人，打字有困难；或者你正在组建基于触摸屏的信息服务站。

屏幕键盘也可以作为一种防范实体键盘记录器的保护手段，键盘记录器会悄悄记录按键来获取密码等敏感信息。一些网上银行页面实际上会强制你使用屏幕键盘来增强交易的安全性。

在 linux 中有几个可用的开源键盘软件， 比如 [GOK (Gnome 的屏幕键盘)](https://developer.gnome.org/gok/)，[kvkbd](http://homepage3.nifty.com/tsato/xvkbd/)，[onboard](https://launchpad.net/onboard)，[Florence](http://florence.sourceforge.net/)。

我会在这个教程中集中讲解 Florence， 告诉你**如何用 Florence 设置一个屏幕键盘**。 Florence 有着布局方案灵活、输入法多样、自动隐藏等特性。作为教程的一部分，我也将会示范**如何只使用鼠标来操作 Ubuntu 桌面**。

### 在 Linux 中安装 Florence 屏幕键盘

幸运的是，Florence 存在于大多数 Linux 发行版的基础仓库中。

在 Debian，Ubuntu 或者 Linux Mint 中：

```
$ sudo apt-get install florence

```

在 Fedora，CentOS 或者 RHEL (CentOS/RHEL 需要[EPEL 仓库](http://xmodulo.com/2013/03/how-to-set-up-epel-repository-on-centos.html)) 中：

```
$ sudo yum install florence

```

在 Mandriva 或者 Mageia 中：

```
$ sudo urpmi florence

```

对于 Archlinux 用户，Florence 存在于 [AUR](https://aur.archlinux.org/packages/florence/) 中。

### 配置和加载屏幕键盘

当你安装好 Florence 之后，你只需要简单的输入以下命令就能加载屏幕键盘：

```
$ florence

```

默认情况下，屏幕键盘总是在其他窗口的顶部，让你能够在任意活动的窗口上进行输入。

在键盘的左侧点击工具按键来改变 Florence 的默认配置。

在 Florence 的 "样式 (style)" 菜单中，你能够自定义键盘样式，启用/取消声音效果。

在“窗口 (window)”菜单中，你能够调整键盘背景透明度、按键不透明度，以及控制键盘比例、工具栏、尺寸和总是置顶等特性。如果你的桌面分辨率不是非常高，透明度调整就显得非常有用，因为屏幕键盘会挡住其他窗口。在这个例子中，我切换到透明键盘，并且设置不透明度为 50%。

在“行为 (behaviour)”菜单中，你能够改变输入方法。Florence 支持几种不同的输入法: 鼠标 (mouse)、触摸屏 (touch screen)、计时器 (timer) 和漫步 (ramble)。鼠标输入是默认输入法。最后的两种输入法不需要按鼠标键。 计时器输入通过将指针滞留在按键上一定时间来触发按键。漫步输入的原理跟**计时器**输入差不多，但是经过训练和灵巧使用，能够比**计时器**输入更加迅速。

在“布局 (layout)”菜单中，你能够改变键盘布局。比如，你能够扩展键盘布局来增加导航键，数字键和功能键。

### 只使用鼠标来操作 Ubuntu 桌面

我将示范如何将 Florence 集成到 Ubuntu 桌面中，然后我们不需要实体键盘就能够进入桌面。这个教程使用 LightDM (Ubuntu 的默认显示管理器) 来进入 Ubuntu，其他桌面环境也能设置类似的环境。

初始设置时需要实体键盘，但是一旦设置完成，你只需要一个鼠标，而不是键盘。

当你启动 Ubuntu 桌面时，启动程序最后会停在显示管理器 (或者登录管理器) 的欢迎界面。在这个界面上你需要输入你的登录信息。默认的情况下，Ubuntu 桌面会使用 LightDM 显示管理器和 Unity 欢迎界面。如果没有实体键盘， 你就不能在登录界面输入用户名和密码。

为了能够在登录界面加载屏幕键盘，安装配备了屏幕键盘支持的 GTK+ 欢迎界面。

```
 $ sudo apt-get install lightdm-gtk-greeter

```

然后用编辑器打开欢迎界面配置文件 (/etc/lightdm/lightdm-gtk-greeter.conf)，指定 Florence 作为屏幕键盘来使用。如果你愿意，你也能够使用 Ubuntu 的默认屏幕键盘 onboard 来代替 Florence。

```
 $ sudo vi /etc/lightdm/lightdm-gtk-greeter.conf

```

---

```
[greeter]
keyboard=florence --no-gnome --focus &

```

重启 Ubuntu 桌面，然后看看你是否能够在登录界面使用屏幕键盘。

启动之后当你看到 GTK+ 欢迎界面时, 点击右上角的人形符号。你会看到“使用屏幕键盘 (On Screen Keyboard)”菜单选项，如下：

点击这个选项，屏幕键盘就会在登录界面弹出。现在你应该能够用屏幕键盘来登录了。

对于 GDM2/GDM3 用户怎么在 GDM2/GDM3 界面上使用屏幕键盘，Florence 官方网页提供了 [文档 (documentation)](http://florence.sourceforge.net/english/how-to.html)。

Ubuntu 桌面完全无键盘化的最后一步是让屏幕键盘在登录后自动启动，这样我们在登录后能够不使用实体键盘就操作桌面，为了做到这一点，创建以下桌面文件：

```
$ mkdir -p ~/.config/autostart
$ vi ~/.config/autostart/florence.desktop

```

---

```
[Desktop Entry]
Type=Application
Name=Virtual Keyboard
Comment=Auto-start virtual keyboard
Exec=florence --no-gnome

```

这样可以让你在登录到桌面的时候就看到屏幕键盘。

希望这个教程对你有用。与你所看到的一样，Florence 是非常强大的屏幕键盘，可以用于不同目的。请和我分享你使用屏幕键盘的经验。

---

via: <http://xmodulo.com/2014/08/onscreen-virtual-keyboard-linux.html>

作者：[Dan Nanni](http://xmodulo.com/author/nanni) 译者：[forsil](https://github.com/forsil) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出