2015年5月

Linux-Dash是一个用于GNU/Linux机器的,低开销的监控仪表盘。您可以安装试试!Linux Dash的界面提供了您的服务器的所有关键信息的详细视图,可监测的信息包括RAM、磁盘使用率、网络、安装的软件、用户、运行的进程等。所有的信息都被分成几类,您可以通过主页工具栏中的按钮跳到任何一类中。Linux Dash并不是最先进的监测工具,但它十分适合寻找灵活、轻量级、容易部署的应用的用户。

Linux-Dash的功能

  • 使用一个基于Web的漂亮的仪表盘界面来监控服务器信息
  • 实时的按照你的要求监控RAM、负载、运行时间、磁盘配置、用户和许多其他系统状态
  • 支持基于Apache2/niginx + PHP的服务器
  • 通过点击和拖动来重排列控件
  • 支持多种类型的linux服务器

当前控件列表

  • 通用信息
  • 平均负载
  • RAM
  • 磁盘使用量
  • 用户
  • 软件
  • IP
  • 网络速率
  • 在线状态
  • 处理器
  • 日志

在Ubuntu server 14.10上安装Linux-Dash

首先您需要确认您安装了Ubuntu LAMP server 14.10,接下来您需要安装下面的包:

sudo apt-get install php5-json unzip

安装这个模块后,需要在apache2中启用该模块,所以您需要使用下面的命令重启apache2服务器:

sudo service apache2 restart

现在您需要下载linux-dash的安装包并安装它:

wget https://github.com/afaqurk/linux-dash/archive/master.zip

unzip master.zip

sudo mv linux-dash-master/ /var/www/html/

接下来您需要使用下面的命令来改变权限:

sudo chmod 755 /var/www/html/linux-dash-master/

现在您便可以访问http://serverip/linux-dash-master/了。您应该会看到类似下面的输出:


via: http://www.ubuntugeek.com/install-linux-dash-web-based-monitoring-tool-on-ubntu-14-10.html

作者:ruchi 译者:wwy-hust 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

大家好,这篇文章是介绍Lftp以及如何在Linux操作系统下安装的。Lftp是一个基于命令行的文件传输软件(也被称为FTP客户端),由Alexander Lukyanov开发并以GNU GPL协议许可发行。除了FTP协议外,它还支持FTPS,HTTP,HTTPS,HFTP,FISH,以及SFTP等协议。这个程序还支持FXP,允许数据绕过客户端直接在两个FTP服务器之间传输。

它有很多很棒的高级功能,比如递归镜像整个目录树以及断点续传下载。传输任务可以安排在稍后的时间段计划执行,可以限制带宽,可以创建传输列表,还支持类似Unix shell的任务控制。客户端还可以在交互式或自动脚本里使用。

安装Lftp

在运行lftp之前,我们需要确定它已经正确安装在我们的Linux发行版中了。下面是在常见Linux发行版中安装lftp的一些命令。

Ubuntu 14.04 LTS

在Ubuntu 14.04 LTS以及它的衍生版中,我们可以通过apt管理程序安装lftp。要安装它,我们需要使用sudo权限在shell或终端里运行下面的命令。

$ sudo apt-get install lftp

ubuntu install lftp

CentOS/Fedora/RHEL

因为在Fedora,CentOS和RHEL的软件仓库里也能找到lftp,我们可以用yum管理程序来安装它。

$ sudo yum install lftp

fedora lftp

Arch Linux

在Arch Linux安装包仓库里也有,我们可以简单地使用pacman来安装它。

$ sudo pacman -S lftp

archlinux install lftp

OpenSuse

OpenSuse系统里的包管理软件Zypper可以用来安装lftp。下面是在OpenSuse机器上用来安装的命令。

$ sudo zypper install lftp

opensuse lftp install

登录

要登录到ftp服务器或sftp服务器,我们首先需要知道所要求的认证信息,比如用户名,密码,端口。

之后,我们可以通过lftp来登录。

$ lftp ftp://linoxide@localhost

ftp login

如果需要指定登录端口,我们可以按下面的方式加上去。

$ lftp ftp://linoxide@localhost:21

ftp login with ports

导航

我们可以用ls命令来列出文件和目录,用cd命令进入到目录。

ls and cd

上传和下载文件

我们可以用pget命令来从远端服务器下载文件。

> pget linspeed.svg

pget lftp

我们可以用put命令来上传文件到远端服务器。

> put linoxide.tar

upload with put

要恢复之前只下载了一部分的文件/目录,我们可以用-c开关:

> mirror -c Directory

>pget -c linoxide.tar

> put -c upload.tar

使用镜像命令

我们可以用mirror命令来下载所指定的整个目录。

> mirror remote local

download with mirror

还可以做反向镜像(mirror -R),可以用来上传或更新本地目录树到服务器上。

> mirror -R local remote

upload or update with mirror reverse

要恢复之前下载了一部分的文件/目录,我们可以用-c开关:

> mirror -c Directory

下载队列

我们可以在lftp里使用queue的选项,这样我们可以像基于GUI的客户端那样挨个下载队列里选择的文件。下面举个例子。

为了避免队列自动开始传输,我们可以这样做:

> queue stop

现在,我们添加任务到队列。

> queue mirror "directory"

> queue pget "file.tar"

在建立好队列后,我们再运行queue start命令。

> queue start

可以运行下面的命令移除整个队列。

> queue -d

分块下载

下面是一个把一个文件分成3块来下载的例子,你可以根据自己的需要调整。

使用pget命令分块功能的方式是pget -n 3 file.tar,里面的3是分块的数目。

> pget -n 3 file.tar

使用mirror命令分块功能的方式是mirror --use-pget-n=3 directory,里面的3是分块的数目。

> mirror --use-pget-n=3 linxoxide

我们可以用jobs -v命令来查看每个独立分块的下载速度以及整体速度。

停止,继续或删除一次传输任务

要取消传输我们可以按下Ctrl+C。而要恢复下载我们可以像下面那样使用-c (--continue)开关。

> mirror -c directory

要删除一次正在正在传输的任务我们可以用kill命令,而要删除所有任务我们可以使用下面那样的kill all命令。

> kill

> kill all

退出

要从lftp退出,我们需要在终端或lftp交互接口中运行exit命令。

> exit

总结

哇!我们已经成功地安装了lftp并学会了它的一些基础的主要使用方式。lftp是一个非常棒的命令行ftp客户端,它支持许多额外的功能以及很酷的特性。它比其他普通ftp客户端多了很多东西。好吧,你要是有任何问题,建议,反馈,请在下面的评论区里留言。谢谢!享用lftp吧 :-)


via: http://linoxide.com/linux-how-to/setup-lftp-command-line-ftp/

作者:Arun Pyasi 译者:zpl1025 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

提问: 我想在VPS中安装CentOS桌面,并可以直接从我家远程访问GUI桌面。在VPS上设置和访问CentOS远程桌面有什么建议吗?

如何远程办公或者远程弹性化工作制在技术领域正变得越来越流行。这个趋势背后的一个技术就是远程桌面。你的桌面环境在云中,你可以在任何你去的地方,或者在家或者工作场所访问你的远程桌面。

这个教程介绍如何VPS中设置基于CentOS的远程桌面。现在,我们会先展示CentOS的基础环境。

我们假设你已经创建了CentOS 7的VPS实例(比如,使用DigitalOcean 或者 Amazon EC2)。请确保你的VPS实例有至少1GB的内存。不然,CentOS将会在你访问远程桌面的时候会崩溃。

第一步: 安装CentOS桌面

如果你现在安装的CentOS版本是没有桌面的最小版本,你需要先在VPS上安装桌面(比如GNOME)。比如,DigitalOcean的镜像就是最小版本,它需要如下安装桌面GUI

# yum groupinstall "GNOME Desktop" 

在安装完成之后重启VPS。

第二步:安装和配置VNC服务器

接下来就是安装和配置VNC服务器。我们使用的是TigerVNC,一个开源的VNC服务实现。

# yum install tigervnc-server 

现在创建一个用户账户(比如:xmodulo)用来访问远程桌面。

# useradd xmodulo
# passwd xmodulo 

当一个用户尝试使用VNC访问远程桌面时,VNC守护进程就会启动来处理这个请求。这意味着你需要为每个用户创建一个独立的VNC配置文件。

CentOS依靠systemd来管理和配置系统服务。所以我们将使用systemd来为用户xmodulo配置VNC服务器。

首先让我们使用下面任意一条命令来检查VNC服务器的状态。

# systemctl status vncserver@:.service
# systemctl is-enabled [email protected] 

默认的,刚安装的VNC服务并没有激活(禁用)。

现在复制一份通用的VNC服务文件来为用户xmodulo创建一个VNC服务配置。

# cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service 

用本文编辑器来打开配置文件,用实际的用户名(比如:xmodulo)来替换[Service]下面的。同样。在ExecStart后面追加 "-geometry " 参数。最后,要修改下面“ExecStart”和“PIDFile”两行。

# vi /etc/systemd/system/vncserver@:1.service 

[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l xmodulo -c "/usr/bin/vncserver %i -geometry 1024x768"
PIDFile=/home/xmodulo/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

现在为用户xmodulo设置密码(可选)。首先切换到该用户,并运行vncserver命令。

# su - xmodulo
# vncserver

你会被提示输入用户的VNC密码。密码设置完成后,你下次需要用这个密码来访问你的远程桌面。

最后,重新加载服务来使新的VNC配置生效:

# systemctl daemon-reload

在启动时自动启动VNC服务:

# systemctl enable vncserver@:1.service

检查vnc服务正在监听的端口:

# netstat -tulpn | grep vnc 

端口5901是VNC默认的客户端连接到VNC服务器使用的端口。

第三步:通过SSH连接到远程桌面

从设计上说,VNC使用的远程帧缓存(RFB)并不是一种安全的协议,那么在VNC客户端上直接连接到VNC服务器上并不是一个好主意。任何敏感信息比如密码都可以在VNC流量中被轻易地泄露。因此,我强烈建议使用SSH隧道来加密你的VNC流量

在你要运行VNC客户端的本机上,使用下面的命令来创建一个连接到远程VPS的SSH通道。当被要输入SSH密码时,输入用户的密码。

$ ssh xmodulo@<VPS-IP-address> -L 5901:127.0.0.1:5901 

用你自己的VNC用户名来替换“xmodulo”,并填上你自己的VPS IP地址。

一旦SSH通道建立之后,远程VNC流量就会通过ssh通道路由并发送到127.0.0.1:5901。

现在启动你最爱的VNC客户端(比如:vinagre),来连接到127.0.0.1:5901。

你将被要求输入VNC密码。当你输入VNC密码时,你就可以安全地连接到CentOS的远程桌面了。

然后就会看到如题图的显示。


via: http://ask.xmodulo.com/centos-remote-desktop-vps.html

作者:Dan Nanni 译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

概述:

所有的类linux系统都会提供一个名为grep(global regular expression print,全局正则表达式输出)的搜索工具。grep命令在对一个或多个文件的内容进行基于模式的搜索的情况下是非常有用的。模式可以是单个字符、多个字符、单个单词、或者是一个句子。

当命令匹配到执行命令时指定的模式时,grep会将包含模式的一行输出,但是并不对原文件内容进行修改。

在本文中,我们将会讨论到14个grep命令的例子。

例1 在文件中查找模式(单词)

在/etc/passwd文件中查找单词“linuxtechi”

root@Linux-world:~# grep linuxtechi /etc/passwd
linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
root@Linux-world:~#

例2 在多个文件中查找模式。

root@Linux-world:~# grep linuxtechi /etc/passwd /etc/shadow /etc/gshadow
/etc/passwd:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
/etc/shadow:linuxtechi:$6$DdgXjxlM$4flz4JRvefvKp0DG6re:16550:0:99999:7:::/etc/gshadow:adm:*::syslog,linuxtechi
/etc/gshadow:cdrom:*::linuxtechi
/etc/gshadow:sudo:*::linuxtechi
/etc/gshadow:dip:*::linuxtechi
/etc/gshadow:plugdev:*::linuxtechi
/etc/gshadow:lpadmin:!::linuxtechi
/etc/gshadow:linuxtechi:!::
/etc/gshadow:sambashare:!::linuxtechi
root@Linux-world:~#

例3 使用-l参数列出包含指定模式的文件的文件名。

root@Linux-world:~# grep -l linuxtechi /etc/passwd /etc/shadow /etc/fstab /etc/mtab
/etc/passwd
/etc/shadow
root@Linux-world:~#

例4 使用-n参数,在文件中查找指定模式并显示匹配行的行号

root@Linux-world:~# grep -n linuxtechi /etc/passwd
39:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
root@Linux-world:~#
root@Linux-world:~# grep -n root /etc/passwd /etc/shadow

例5 使用-v参数输出不包含指定模式的行

输出/etc/passwd文件中所有不含单词“linuxtechi”的行

root@Linux-world:~# grep -v linuxtechi /etc/passwd

例6 使用 ^ 符号输出所有以某指定模式开头的行

Bash脚本将 ^ 符号视作特殊字符,用于指定一行或者一个单词的开始。例如输出/etc/passes文件中所有以“root”开头的行

root@Linux-world:~# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@Linux-world:~#

例7 使用 $ 符号输出所有以指定模式结尾的行。

输出/etc/passwd文件中所有以“bash”结尾的行。

root@Linux-world:~# grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
root@Linux-world:~#

Bash脚本将美元($)符号视作特殊字符,用于指定一行或者一个单词的结尾。

例8 使用 -r 参数递归地查找特定模式

root@Linux-world:~# grep -r linuxtechi /etc/
/etc/subuid:linuxtechi:100000:65536
/etc/group:adm:x:4:syslog,linuxtechi
/etc/group:cdrom:x:24:linuxtechi
/etc/group:sudo:x:27:linuxtechi
/etc/group:dip:x:30:linuxtechi
/etc/group:plugdev:x:46:linuxtechi
/etc/group:lpadmin:x:115:linuxtechi
/etc/group:linuxtechi:x:1000:
/etc/group:sambashare:x:131:linuxtechi
/etc/passwd-:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
/etc/passwd:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
............................................................................

上面的命令将会递归的在/etc目录中查找“linuxtechi”单词

例9 使用 grep 查找文件中所有的空行

root@Linux-world:~# grep ^$ /etc/shadow
root@Linux-world:~#

由于/etc/shadow文件中没有空行,所以没有任何输出

例10 使用 -i 参数查找模式

grep命令的-i参数在查找时忽略字符的大小写。

我们来看一个例子,在paswd文件中查找“LinuxTechi”单词。

nextstep4it@localhost:~$ grep -i LinuxTechi /etc/passwd
linuxtechi:x:1001:1001::/home/linuxtechi:/bin/bash
nextstep4it@localhost:~$

例11 使用 -e 参数查找多个模式

例如,我想在一条grep命令中查找‘linuxtechi’和‘root’单词,使用-e参数,我们可以查找多个模式。

root@Linux-world:~# grep -e "linuxtechi" -e "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
root@Linux-world:~#

例12 使用 -f 用文件指定待查找的模式

首先,在当前目录中创建一个搜索模式文件“grep\_pattern”,我想文件中输入的如下内容。

root@Linux-world:~# cat grep_pattern
^linuxtechi
root
false$
root@Linux-world:~#

现在,试试使用grep\_pattern文件进行搜索

root@Linux-world:~# grep -f grep_pattern /etc/passwd

例13 使用 -c 参数计算模式匹配到的数量

继续上面例子,我们在grep命令中使用-c命令计算匹配指定模式的数量

root@Linux-world:~# grep -c -f grep_pattern /etc/passwd
22
root@Linux-world:~#

例14 输出匹配指定模式行的前或者后面N行

a)使用-B参数输出匹配行的前4行

root@Linux-world:~# grep -B 4 "games" /etc/passwd

b)使用-A参数输出匹配行的后4行

root@Linux-world:~# grep -A 4 "games" /etc/passwd

c)使用-C参数输出匹配行的前后各4行

root@Linux-world:~# grep -C 4 "games" /etc/passwd


via: http://www.linuxtechi.com/linux-grep-command-with-14-different-examples/

作者:Pradeep Kumar 译者:cvsher 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

大家好,今天我们来学习一些在你使用 Docker 之前需要了解的重要的 Docker 命令。Docker 是一个开源项目,提供了一个可以打包、装载和运行任何应用的轻量级容器的开放平台。它没有语言支持、框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行。这使它们可以不依赖于特定软件栈和供应商,像一块块积木一样部署和扩展网络应用、数据库和后端服务。

Docker 命令简单易学,也很容易实现或实践。这是一些你运行 Docker 并充分利用它需要知道的简单 Docker 命令。

1. 拉取 Docker 镜像

由于容器是由 Docker 镜像构建的,首先我们需要拉取一个 docker 镜像来开始。我们可以从 Docker Registry Hub 获取所需的 docker 镜像。在我们使用 pull 命令拉取任何镜像之前,为了避免 pull 命令的一些恶意风险,我们需要保护我们的系统。为了保护我们的系统不受这个风险影响,我们需要添加 127.0.0.1 index.docker.io 到 /etc/hosts 条目。我们可以通过使用喜欢的文本编辑器完成。

# nano /etc/hosts

现在,增加下面的一行到文件并保存退出。

127.0.0.1 index.docker.io

Docker 宿主机

要拉取一个 docker 镜像,我们需要运行下面的命令。

# docker pull registry.hub.docker.com/busybox

Docker pull 命令

我们可以检查本地是否有可用的 Docker 镜像。

# docker images

Docker 镜像

2. 运行 Docker 容器

现在,成功地拉取要求的或所需的 Docker 镜像之后,我们当然想运行这个 Docker 镜像。我们可以用 docker run 命令在镜像上运行一个 docker 容器。在 Docker 镜像上运行一个 docker 容器时我们有很多选项和标记。我们使用 -t 和 -i 选项来运行一个 docker 镜像并进入容器,如下面所示。

# docker run -it busybox

Docker Run Shell 命令

从上面的命令中,我们进入了容器并可以通过交互 shell 访问它的内容。我们可以键入 Ctrl-D 从shell中退出。

现在,在后台运行容器,我们用 -d 标记分离 shell,如下所示。

# docker run -itd busybox

后台运行容器

如果你想进入到一个正在运行的容器,我们可以使用 attach 命令加一个容器 id。可以使用 docker ps 命令获取容器 id。

# docker attach <container id>

进入Docker

3. 检查容器运行

不论容器是否运行,查看日志文件都很简单。我们可以使用下面的命令去检查是否有 docker 容器在实时运行。

# docker ps

现在,查看正在运行的或者之前运行的容器的日志,我们需要运行以下的命令。

# docker ps -a

查看 Docker 容器

4. 查看容器信息

我们可以使用 inspect 命令查看一个 Docker 容器的各种信息。

# docker inspect <container id>

检查Docker

5. 杀死或删除

我们可以使用容器 id 杀死或者停止 docker 容器(进程),如下所示。

# docker stop <container id>

要停止每个正在运行的容器,我们需要运行下面的命令。

# docker kill $(docker ps -q)

现在,如我我们希望移除一个 docker 镜像,运行下面的命令。

# docker rm <container id>

如果我们想一次性移除所有 docker 镜像,我们可以运行以下命令。

# docker rm $(docker ps -aq)

结论

这些都是充分学习和使用 Docker 很基本的 docker 命令。有了这些命令,Docker 变得很简单,可以提供给最终用户一个易用的计算平台。根据上面的教程,任何人学习 Docker 命令都非常简单。如果你有任何问题,建议,反馈,请写到下面的评论框中以便我们改进和更新内容。多谢! 希望你喜欢 :-)


via: http://linoxide.com/linux-how-to/important-docker-commands/

作者:Arun Pyasi 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Question: 我需要在我的Ubuntu主机上建立一个Linux网桥,共享一个网卡给其他一些虚拟主机或在主机上创建的容器。我目前正在Ubuntu上使用网络管理器(Network Manager),所以最好>能使用网络管理器来配置一个网桥。我该怎么做?

网桥是一个硬件装备,用来将两个或多个数据链路层(OSI七层模型中第二层)互联,以使得不同网段上的网络设备可以互相访问。当你想要互联一个主机里的多个虚拟机器或者以太接口时,就需要在Linux主机里有一个类似桥接的概念。这里使用的是一种软网桥。

有很多的方法来配置一个Linux网桥。举个例子,在一个无外接显示/键盘的服务器环境里,你可以使用brct手动地配置一个网桥。而在桌面环境下,在网络管理器里也支持网桥设置。那就让我们测试一下如何用网络管理器配置一个网桥吧。

要求

为了避免任何问题,建议你的网络管理器版本为0.9.9或者更高,它用在 Ubuntu 15.04或者更新的版本。

$ apt-cache show network-manager | grep Version

Version: 0.9.10.0-4ubuntu15.1
Version: 0.9.10.0-4ubuntu15

创建一个网桥

使用网络管理器创建网桥最简单的方式就是通过nm-connection-editor。这款GUI(图形用户界面)的工具允许你傻瓜式地配置一个网桥。

首先,启动nm-connection-editor。

$ nm-connection-editor

该编辑器的窗口会显示给你一个列表,列出目前配置好的网络连接。点击右上角的“添加”按钮,创建一个网桥。

接下来,选择“Bridge”(网桥)作为连接类型。

现在,开始配置网桥,包括它的名字和所桥接的连接。如果没有创建过其他网桥,那么默认的网桥接口会被命名为bridge0。

回顾一下,创建网桥的目的是为了通过网桥共享你的以太网卡接口,所以你需要添加以太网卡接口到网桥。在图形界面添加一个新的“桥接的连接”可以实现上述目的。点击“Add”按钮。

选择“以太网”作为连接类型。

在“设备的 MAC 地址”区域,选择你想要从属于网桥的接口。本例中,假设该接口是eth0。

点击“常规”标签,并且选中两个复选框,分别是“当其可用时自动连接到该网络”和“所有用户都可以连接到该网络”。

切换到“IPv4 设置”标签,为网桥配置DHCP或者是静态IP地址。注意,你应该为从属的以太网卡接口eth0使用相同的IPv4设定。本例中,我们假设eth0是用过DHCP配置的。因此,此处选择“自动(DHCP)”。如果eth0被指定了一个静态IP地址,那么你也应该指定相同的IP地址给网桥。

最后,保存网桥的设置。

现在,你会看见一个新增的网桥连接被创建在“网络连接”窗口里。因为已经从属与网桥,以前配置好的有线连接 eth0 就不再需要了,所以去删除原来的有线连接吧。

这时候,网桥连接会被自动激活。从指定给eth0的IP地址被网桥接管起,你将会暂时丢失一下连接。当IP地址赋给了网桥,你将会通过网桥连接回你的以太网卡接口。你可以通过“Network”设置确认一下。

同时,检查可用的接口。提醒一下,网桥接口必须已经取代了任何你的以太网卡接口拥有的IP地址。

就这么多了,现在,网桥已经可以用了。


via: http://ask.xmodulo.com/configure-linux-bridge-network-manager-ubuntu.html

作者:Dan Nanni 译者:wi-cuckoo 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出