Skip to content Skip to main navigation Skip to footer

Linux

Linux:Linux 命令行下嗅探 HTTP 流量的工具:httpry

假设由于某种原因,你需要嗅探HTTP站点的流量(如HTTP请求与响应)。举个例子,你可能在测试一个web服务器的实验性功能,或者你在为某个web应用或RESTful服务排错,又或者你正在为PAC(proxy auto config)排错或寻找某个站点下载的恶意软件。不论什么原因,在这些情况下,进行HTTP流量嗅探对于系统管理、开发者、甚至最终用户来说都是很有帮助的。

数据包嗅工具tcpdump被广泛用于实时数据包的导出,但是你需要设置过滤规则来捕获HTTP流量,甚至它的原始输出通常不能方便的停在HTTP协议层。实时web服务器日志解析器如ngxtop可以提供可读的实时web流量跟踪痕迹,但这仅适用于可完全访问live web服务器日志的情况。

要是有一个仅用于抓取HTTP流量的类似tcpdump的数据包嗅探工具就非常好了。事实上,httpry就是:HTTP包嗅探工具。httpry捕获HTTP数据包,并且将HTTP协议层的数据内容以可读形式列举出来。通过这篇指文章,让我们了解如何使用httpry工具嗅探HTTP流量。

在Linux上安装httpry

基于Debian系统(Ubuntu 或 LinuxMint),基础仓库中没有httpry安装包(译者注:本人ubuntu14.04,仓库中已有包,可直接安装)。所以我们需要通过源码安装:

$ sudo apt-get install gcc make git libpcap0.8-dev
$ git clone https://github.com/jbittel/httpry.git
$ cd httpry
$ make
$ sudo make install

在Fedora,CentOS 或 RHEL系统,可以使用如下yum命令安装httpry。在CentOS/RHEL系统上,运行yum之前使其能够访问EPEL repo

$ sudo yum install httpry

如果你仍想通过基于RPM系统的源码来安装httpry的话,你可以通过这几个步骤实现:

$ sudo yum install gcc make git libpcap-devel
$ git clone https://github.com/jbittel/httpry.git
$ cd httpry
$ make
$ sudo make install

httpry的基本用法

以下是httpry的基本用法

$ sudo httpry -i 

httpry就会监听指定的网络接口,并且实时的显示捕获到的HTTP请求/相应。

Linux:Linux 命令行下嗅探 HTTP 流量的工具:httpry
Linux:Linux 命令行下嗅探 HTTP 流量的工具:httpry

在大多数情况下,由于发送与接到的数据包过多导致刷屏很快,难以分析。这时候你肯定想将捕获到的数据包保存下来以便离线分析。可以使用’b’或’-o’选项保存数据包。’-b’选项将数据包以二进制文件的形式保存下来,这样可以使用httpry软件打开文件以浏览。另一方面,’-o’选项将数据以可读的字符文件形式保存下来。

以二进制形式保存文件:

$ sudo httpry -i eth0 -b output.dump

浏览所保存的HTTP数据包文件:

$ httpry -r output.dump

注意,不需要根用户权限就可以使用’-r’选项读取数据文件。

将httpry数据以字符文件保存:

$ sudo httpry -i eth0 -o output.txt

httpry 的高级应用

如果你想监视指定的HTTP方法(如:GET,POST,PUT,HEAD,CONNECT等),使用’-m’选项:

$ sudo httpry -i eth0 -m get,head
Linux:Linux 命令行下嗅探 HTTP 流量的工具:httpry
Linux:Linux 命令行下嗅探 HTTP 流量的工具:httpry

如果你下载了httpry的源码,你会发现源码下有一些Perl脚本,这些脚本用于分析httpry输出。脚本位于目录httpry/scripts/plugins。如果你想写一个定制的httpry输出分析器,则这些脚可以作为很好的例子。其中一些有如下的功能:

  • hostnames: 显示唯一主机名列表。
  • find_proxies: 探测web代理。
  • search_terms: 查找及统计在搜索服务里面的搜索词。
  • content_analysis: 查找含有指定关键的URL。
  • xml_output: 将输出转换为XML形式。
  • log_summary: 生成日志汇总。
  • db_dump: 将日志文件数据保存数据库。

在使用这些脚本之前,首先使用’-o’选项运行httpry。当获取到输出文件后,立即使用如下命令执行脚本:

$ cd httpry/scripts
$ perl parse_log.pl -d ./plugins 

你可能在使用插件的时候遇到警告。比如,如果你没有安装带有DBI接口的MySQL数据库,那么使用db_dump插件时可能会失败。如果一个插件初始化失败的话,那么只是这个插件不能使用,所以你可以忽略那些警告。

当parse_log.pl完成后,你将在httpry/scripts 目录下看到数个分析结果。例如,log_summary.txt 与如下内容类似。

Linux:Linux 命令行下嗅探 HTTP 流量的工具:httpry
Linux:Linux 命令行下嗅探 HTTP 流量的工具:httpry

总的来说,当你要分析HTTP数据包的时候,httpry非常有用。它可能并不被大多Linux使用者所熟知,但会用总是有好处的。你觉得这个工具怎么样呢?


via: http://xmodulo.com/2014/08/sniff-http-traffic-command-line-linux.html

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

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

来源:https://linux.cn/article-4148-1.html

Linux:浅谈 Docker 隔离性和安全性

介绍

相信很多开发者都默认Docker这样的容器是一种沙盒(sandbox)应用,也就是说他们可以用root权限在Docker中运行随便什么应用,而Docker有安全机制能保护宿主系统。比如,有些人觉得Docker容器里面的进程跟虚拟机里面的进程一样安全;还有的人随便找个源就下载没有验证过的Docker镜像,看都不看内容就在宿主机器上尝试、学习和研究;还有一些提供PaaS服务的公司竟然允许用户向多租户系统中提交自己定制的Docker镜像。请注意,上述行为均是不安全的。

 本文将介绍Docker的隔离性和安全性,以及为什么它在隔离和安全性上不如传统的虚拟机。

Linux:浅谈 Docker 隔离性和安全性
Linux:浅谈 Docker 隔离性和安全性

更多信息

何谓安全性?

单单就Docker来说,安全性可以概括为两点:

  1. 不会对主机造成影响
  2. 不会对其他容器造成影响

所以安全性问题90%以上可以归结为隔离性问题。而Docker的安全问题本质上就是容器技术的安全性问题,这包括共用内核问题以及Namespace还不够完善的限制:

  • /proc、/sys等未完全隔离
  • Top, free, iostat等命令展示的信息未隔离
  • Root用户未隔离
  • /dev设备未隔离
  • 内核模块未隔离
  • SELinux、time、syslog等所有现有Namespace之外的信息都未隔离

当然,镜像本身不安全也会导致安全性问题。

真的不如虚拟机安全?

其实传统虚拟机系统也绝非100%安全,只需攻破Hypervisor便足以令整个虚拟机毁于一旦,问题是有谁能随随便便就攻破吗?如上所述,Docker的隔离性主要运用Namespace 技术。传统上Linux中的PID是唯一且独立的,在正常情况下,用户不会看见重复的PID。然而在Docker采用了Namespace,从而令相同的PID可于不同的Namespace中独立存在。举个例子,A Container 之中PID=1是A程序,而B Container之中的PID=1同样可以是A程序。虽然Docker可透过Namespace的方式分隔出看似是独立的空间,然而Linux内核(Kernel)却不能Namespace,所以即使有多个Container,所有的system call其实都是通过主机的内核处理,这便为Docker留下了不可否认的安全问题。

传统的虚拟机同样地很多操作都需要通过内核处理,但这只是虚拟机的内核,并非宿主主机内核。因此万一出现问题时,最多只影响到虚拟系统本身。当然你可以说黑客可以先Hack虚拟机的内核,然后再找寻Hypervisor的漏洞同时不能被发现,之后再攻破SELinux,然后向主机内核发动攻击。文字表达起来都嫌繁复,更何况实际执行?所以Docker是很好用,但在迁移业务系统至其上时,请务必注意安全性!

Linux:浅谈 Docker 隔离性和安全性
Linux:浅谈 Docker 隔离性和安全性

如何解决?

在接纳了“容器并不是全封闭”这种思想以后,开源社区尤其是红帽公司,连同Docker一起改进Docker的安全性,改进项主要包括保护宿主不受容器内部运行进程的入侵、防止容器之间相互破坏。开源社区在解决Docker安全性问题上的努力包括:

  • Audit namespace
    • 作用:隔离审计功能
    • 未合入原因:意义不大,而且会增加audit的复杂度,难以维护。
  • Syslognamespace
    •  作用:隔离系统日志
    • 未合入原因:很难完美的区分哪些log应该属于某个container。
  • Device namespace
    • 作用:隔离设备(支持设备同时在多个容器中使用)
    • 未合入原因:几乎要修改所有驱动,改动太大。
  • Time namespace
    • 作用:使每个容器有自己的系统时间
    • 未合入原因:一些设计细节上未达成一致,而且感觉应用场景不多。
  • Task count cgroup
    • 作用:限制cgroup中的进程数,可以解决fork bomb的问题
    • 未合入原因:不太必要,增加了复杂性,kmemlimit可以实现类似的效果。(最近可能会被合入)
  • 隔离/proc/meminfo的信息显示
    • 作用:在容器中看到属于自己的meminfo信息
    • 未合入原因:cgroupfs已经导出了所有信息,/proc展现的工作可以由用户态实现,比如fuse。

不过,从08年cgroup/ns基本成型后,至今还没有新的namespace加入内核,cgroup在子系统上做了简单的补充,多数工作都是对原有subsystem的完善。内核社区对容器技术要求的隔离性,本的原则是够用就好,不能把内核搞的太复杂。

一些企业也做了很多工作,比如一些项目团队采用了层叠式的安全机制,这些可选的安全机制具体如下:

1、文件系统级防护

  • 文件系统只读:有些Linux系统的内核文件系统必须要mount到容器环境里,否则容器里的进程就会罢工。这给恶意进程非常大的便利,但是大部分运行在容器里的App其实并不需要向文件系统写入数据。基于这种情况,开发者可以在mount时使用只读模式。比如下面几个: /sys 、/proc/sys 、/proc/sysrq-trigger 、 /proc/irq、/proc/bus
  • 写入时复制(Copy-On-Write):Docker采用的就是这样的文件系统。所有运行的容器可以先共享一个基本文件系统镜像,一旦需要向文件系统写数据,就引导它写到与该容器相关的另一个特定文件系统中。这样的机制避免了一个容器看到另一个容器的数据,而且容器也无法通过修改文件系统的内容来影响其他容器。

2、Capability机制

Linux对Capability机制阐述的还是比较清楚的,即为了进行权限检查,传统的UNIX对进程实现了两种不同的归类,高权限进程(用户ID为0,超级用户或者root),以及低权限进程(UID不为0的)。高权限进程完全避免了各种权限检查,而低权限进程则要接受所有权限检查,会被检查如UID、GID和组清单是否有效。从2.2内核开始,Linux把原来和超级用户相关的高级权限划分成为不同的单元,称为Capability,这样就可以独立对特定的Capability进行使能或禁止。通常来讲,不合理的禁止Capability,会导致应用崩溃,因此对于Docker这样的容器,既要安全,又要保证其可用性。开发者需要从功能性、可用性以及安全性多方面综合权衡Capability的设置。目前Docker安装时默认开启的Capability列表一直是开发社区争议的焦点,作为普通开发者,可以通过命令行来改变其默认设置。

3、NameSpace机制

Docker提供的一些命名空间也从某种程度上提供了安全保护,比如PID命名空间,它会将全部未运行在开发者当前容器里的进程隐藏。如果恶意程序看都看不见这些进程,攻击起来应该也会麻烦一些。另外,如果开发者终止pid是1的进程命名空间,容器里面所有的进程就会被全部自动终止,这意味着管理员可以非常容易地关掉容器。此外还有网络命名空间,方便管理员通过路由规则和iptable来构建容器的网络环境,这样容器内部的进程就只能使用管理员许可的特定网络。如只能访问公网的、只能访问本地的和两个容器之间用于过滤内容的容器。

4、Cgroups机制

主要是针对拒绝服务攻击。恶意进程会通过占有系统全部资源来进行系统攻击。Cgroups机制可以避免这种情况的发生,如CPU的cgroups可以在一个Docker容器试图破坏CPU的时候登录并制止恶意进程。管理员需要设计更多的cgroups,用于控制那些打开过多文件或者过多子进程等资源的进程。

5、SELinux

SELinux是一个标签系统,进程有标签,每个文件、目录、系统对象都有标签。SELinux通过撰写标签进程和标签对象之间访问规则来进行安全保护。它实现的是一种叫做MAC(Mandatory Access Control)的系统,即对象的所有者不能控制别人访问对象。

安全建议

最简单的就是不要把Docker容器当成可以完全替代虚拟机的东西。跑在Docker容器中的应用在很长一段时间内都将会是选择性的,通常只跑测试系统或可信业务。

门槛再高一点,我们对系统做减法,通过各种限制来达到安全性。这也是最主流的、有效的安全加固方法,比如上一章节介绍的几种安全机制。同时一定要保证内核的安全和稳定。外部工具的监控、容错等系统也必不可少。

总之通过适配、加固的Docker容器方案,在安全性上完全可以达到商用标准。就是可能对实施人员的技术要求和门槛较高。

参考

Docker在线文档:Docker Security

OpenSource.com:Bringing new security features to Docker

InfoQ:从社区和内核看Docker隔离性和安全性发展

 

来源:https://community.emc.com/docs/DOC-44930

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

SIFT 是一个由 SANS 公司提供的基于 Ubuntu 的取证发行版。它包含许多取证工具,如 Sleuth kit/Autopsy 。但 Sleuth kit/Autopsy 可以直接在 Ubuntu 或 Fedora 发行版本上直接安装,而不必下载 SIFT 的整个发行版本。

Sleuth Kit/Autopsy 是一个开源的电子取证调查工具,它可以用于从磁盘映像中恢复丢失的文件,以及为了特殊事件进行磁盘映像分析。 Autopsy 工具是 sleuth kit 的一个网页接口,支持 sleuth kit 的所有功能。这个工具在 Windows 和 Linux 平台下都可获取到。

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

安装 Sleuth kit

首先,从 sleuthkit 的网站下载 Sleuth kit 软件。使用下面的命令在虚拟终端下使用 wget 命令来下载它,下图展示了这个过程。

# wget http://cznic.dl.sourceforge.net/project/sleuthkit/sleuthkit/4.1.3/sleuthkit-4.1.3.tar.gz
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

使用下面的命令解压 sleuthkit-4.1.3.tar.gz 并进入解压后的目录:

# tar -xvzf sleuthkit-4.1.3.tar.gz

解压过程

在安装 sleuth kit 之前,运行下面的命令来执行所需的检查:

# ./configure
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

然后使用 Make 命令来编译 sleuth kit :

# make
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

最后,使用下面的命令将它安装到 /usr/local 目录下:

# make install
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

安装 Autopsy 工具

Sleuth kit 已经安装完毕,现在我们将为它安装 autopsy 界面。从 sleuthkit 的 autopsy 页面下载 Autopsy 软件。使用下面的命令在虚拟终端下使用 wget 命令来下载它,下图展示了这个过程。

# wget http://kaz.dl.sourceforge.net/project/autopsy/autopsy/2.24/autopsy-2.24.tar.gz
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

使用下面的命令解压 autopsy-2.24.tar.gz 并进入解压后的目录:

# tar -xvzf autopsy-2.24.tar.gz

Autopsy 的解压

autopsy 的配置脚本将询问 NSRL (National Software Reference Library) 和 Evidence_Locker 文件夹的路径。

当弹窗问及 NSRL 时,输入 “n”,并在 /usr/local 目录下创建名为 EvidenceLocker 的文件夹。Autopsy 将在 EvidenceLocker 文件夹下存储配置文件,审计记录和输出文件。

# mkdir /usr/local/Evidence_Locker
# cd autopsy-2.24
# ./configure
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

在安装过程中添加完 Evidence_Locker 的安装路径后, autopsy 在那里存储配置文件并展现如下的信息来运行 autopsy 程序。

启动 Autopsy

在虚拟终端中键入 ./autopsy 命令来启动 Sleuth kit 工具的图形界面:

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

在浏览器中键入下面的地址来访问 autopsy 的界面:

http://localhost:9999/autopsy

下图展现了 autopsy 插件的主页面:

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

在 autopsy 工具中,点击 新案例 按钮来开始进行分析。键入案例名称,此次调查的描述和检查人的姓名,下图有具体的展示:

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

在接下来的网页中,将展示在上一个的网页中键入的详细信息。接着点击 增加主机 按钮来添加有关要分析的机器的详细信息。

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

在下一个网页中键入主机名,相关的描述和要分析的机器的时区设置。

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

添加主机后,点击 增加映像 按钮来为取证分析添加映像文件。

添加映像

在接下来的网页中点击 增加映像文件 按钮。它将打开一个新的网页,来询问映像文件的路径和选择映像的类型以及导入的方法。

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

正如下图中展示的那样,我们已经键入了 Linux 映像文件的路径。在我们这个例子中,映像文件类型是磁盘分区。

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

点击“下一步”按钮并在下一页中选择 计算散列值 的选项,这在下图中有展示。它也将检测所给映像的文件系统类型。

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

下面的图片展示了静态分析之前映像文件的 MD5 散列值。

散列值

在下一个网页中, autopsy 展现了有关映像文件的如下信息:

  • 映像的挂载点
  • 映像的名称
  • 所给映像的文件系统类型

点击 详情 按钮来获取更多有关所给映像文件的信息。它还提供了从映像文件的卷中导出未分配的片段和字符串的数据信息,这在下图中有展现。

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

在下图中那样,点击 分析 按钮来开始分析所给映像。它将开启另一个页面,其中包含了映像分析的多个选项。

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

在映像分析过程中,Autopsy 提供了如下的功能:

  • 文件分析
  • 关键字搜索
  • 文件类型
  • 映像详情
  • 数据单元

下图展示的是在给定的 Linux 分区映像上进行文件分析:

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

它将从所给映像中提取所有的文件和文件夹。在下图中也展示了已被删除的文件的提取:

Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具
Linux:Sleuth Kit:一个用来分析磁盘映像和恢复文件的开源取证工具

结论

希望这篇文章能够给那些进入磁盘映像静态分析领域的新手提供帮助。Autopsy 是 sleuth kit 的网页界面,提供了在 Windows 和 Linux 磁盘映像中进行诸如字符串提取,恢复被删文件,时间线分析,网络浏览历史,关键字搜索和邮件分析等功能。


via: http://linoxide.com/ubuntu-how-to/autopsy-sleuth-kit-installation-ubuntu/

作者:nido 译者:FSSlc 校对:wxy

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

来源:https://linux.cn/article-5541-1.html

Linux:如何使用Monit部署服务器监控系统

很多Linux系统管理员依赖一个集中式的远程监控系统(比如Nagios或者Cacti)来检查他们网络基础设备的健康状况。虽然集中式监控让管理员的生活更简单了,然而处理很多机器和服务时,专用的监控中心显然成为了一个单点故障,如果监控中心挂了或者因为什么原因(比如硬件或者网络故障)不可访问了,你就会失去整个网络基础设备情况的任何信息。

一个给你的监控系统增加冗余度的方法是安装独立的监控软件(作为后备),至少在网络中的关键/核心服务器上。这样在集中式监控系统挂掉的情况,你还有能力通过后备的监控方式来获取核心服务器的运行状况。

Monit是什么?

Linux:如何使用Monit部署服务器监控系统
Linux:如何使用Monit部署服务器监控系统

Monit是一个跨平台的用来监控Unix/linux系统(比如Linux、BSD、OSX、Solaris)的工具。Monit特别易于安装,而且非常轻量级(只有500KB大小),并且不依赖任何第三方程序、插件或者库。然而,Monit可以胜任全面监控、进程状态监控、文件系统变动监控、邮件通知和对核心服务的自定义动作等场景。易于安装、轻量级的实现以及强大的功能,让Monit成为一个理想的后备监控工具。

我已经在一些机器使用Monit几年了,而且我对它的可靠性非常满意。甚至作为全面的监控系统,对任何Linux系统管理员来说Monit也是非常有用和强大的。在这篇教程中,我会展示如何在一个本地服务器部署Monit(作为后备监控系统)来监控常见的服务。在部署过程中,我只会展示我们用到的部分。

在Linux安装Monit

Monit已经被包含在多数Linux发行版的软件仓库中了。

Debian、Ubuntu或者Linux Mint:

$ sudo aptitude install monit

Fedora或者CentOS/RHEL:

在CentOS/RHEL中,你必须首先启用EPEL或者Repoforge软件仓库.

# yum install monit

Monit自带一个文档完善的配置文件,其中包含了很多例子。主配置文件在/etc/monit.conf(Fedora/CentOS/RHEL 中),或者/etc/monit/monitrc(Debian/Ubuntu/Mint 中)。Monit配置文件有两部分:“Global”(全局)和“Services”(服务)。

Global Configuration: Web Status Page (全局配置:Web状态页面)

Monit可以使用邮件服务来发送通知,也可以使用HTTP/HTTPS页面来展示。我们先使用如下配置的web状态页面吧:

  • Monit监听1966端口。
  • 对web状态页面的访问是通过SSL加密的。
  • 使用monituser/romania作为用户名/口令登录。
  • 只允许通过localhost、myhost.mydomain.ro和在局域网内部(192.168.0.0/16)访问。
  • Monit使用pem格式的SSL证书。

之后的步骤,我会使用一个基于Red Hat的系统。在基于Debian的系统中的步骤也是类似的。

首先,在/var/cert生成一个自签名的证书(monit.pem):

# mkdir /var/certs
# cd /etc/pki/tls/certs
# ./make-dummy-cert monit.pem
# cp monit.pem /var/certs
# chmod 0400 /var/certs/monit.pem

现在将下列代码片段放到Monit的主配置文件中。你可以创建一个空配置文件,或者基于自带的配置文件修改。

set httpd port 1966 and
     SSL ENABLE
     PEMFILE  /var/certs/monit.pem
     allow monituser:romania
     allow localhost
     allow 192.168.0.0/16
     allow myhost.mydomain.ro

Global Configuration: Email Notification (全局配置:邮件通知)

然后,我们来设置Monit的邮件通知。我们至少需要一个可用的SMTP服务器来让Monit发送邮件。这样就可以(按照你的实际情况修改):

  • 邮件服务器的机器名:smtp.monit.ro
  • Monit使用的发件人:monit@monit.ro
  • 邮件的收件人:guletz@monit.ro
  • 邮件服务器使用的SMTP端口:587(默认是25)

有了以上信息,邮件通知就可以这样配置:

set mailserver  smtp.monit.ro port 587
set mail-format {
 from: monit@monit.ro
 subject: $SERVICE $EVENT at $DATE on $HOST
 message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
       Yours sincerely,
          Monit
  }
set alert guletz@monit.ro

就像你看到的,Monit会提供几个内部变量($DATE$EVENT$HOST等),你可以按照你的需求自定义邮件内容。如果你想要从Monit所在机器发送邮件,就需要一个已经安装的与sendmail兼容的程序(如postfix或者ssmtp)。

Global Configuration: Monit Daemon (全局配置:Monit守护进程)

接下来就该配置Monit守护进程了。可以将其设置成这样:

  • 在120秒后进行第一次检测。
  • 每3分钟检测一次服务。
  • 使用syslog来记录日志。

如下代码段可以满足上述需求。

set daemon 120
   with start delay 240
set logfile syslog facility log_daemon

我们必须定义“idfile”,Monit守护进程的一个独一无二的ID文件;以及“eventqueue”,当monit的邮件因为SMTP或者网络故障发不出去,邮件会暂存在这里;以及确保/var/monit路径是存在的。然后使用下边的配置就可以了。

set idfile /var/monit/id
set eventqueue
     basedir /var/monit

测试全局配置

现在“Global”部分就完成了。Monit配置文件看起来像这样:

#  Global Section
# status webpage and acl's
set httpd port 1966 and
     SSL ENABLE
     PEMFILE  /var/certs/monit.pem
     allow monituser:romania
     allow localhost
     allow 192.168.0.0/16
     allow myhost.mydomain.ro
# mail-server
set mailserver  smtp.monit.ro port 587
# email-format
set mail-format {
 from: monit@monit.ro
 subject: $SERVICE $EVENT at $DATE on $HOST
 message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
       Yours sincerely,
          Monit
  }
set alert guletz@monit.ro
# delay checks
set daemon 120
   with start delay 240
set logfile syslog facility log_daemon
# idfile and mail queue path
set idfile /var/monit/id
 set eventqueue
     basedir /var/monit

现在是时候验证我们的工作了,你可以通过运行如下命令来验证存在的配置文件(/etc/monit.conf):

# monit -t
Control file syntax OK

如果monit提示任何错误,请再检查下配置文件。幸运的是,错误/警告信息是可以帮助你发现问题的,比如:

monit: Cannot stat the SSL server PEM file '/var/certs/monit.pem' -- No such file or directory
/etc/monit/monitrc:10: Warning: hostname did not resolve 'smtp.monit.ro'

一旦你确认配置文件没问题了,可以启动monit守护进程,然后等2到3分钟:

# service monit start

如果你使用的是systemd,运行:

# systemctl start monit

现在打开一个浏览器窗口,然后访问https://:1966。将替换成Monit所在机器的机器名或者IP地址。

如果你使用的是自签名的SSL证书,你会在浏览器中看到一个警告信息。继续访问即可。

Linux:如何使用Monit部署服务器监控系统
Linux:如何使用Monit部署服务器监控系统

你完成登录后,就会看到这个页面。

Linux:如何使用Monit部署服务器监控系统
Linux:如何使用Monit部署服务器监控系统

来源:https://linux.cn/article-5542-1.html

Linux:在 OSX 下使用 docker 构建 hexo 环境

Linux:在 OSX 下使用 docker 构建 hexo 环境
Linux:在 OSX 下使用 docker 构建 hexo 环境
  1. 截止目前为止,在docker hub上还看不到hexo 3+版本的镜像构建。
  2. 由于Node环境的安装时间比较长,对于电脑比较多的人相对来说还是比较麻烦的。
  3. 基于DockerFile构建自己的HEXO环境非常灵活,可以根据自己的情况进行定制。
  4. 可以导入导出复制环境部署到其他电脑中。

实践开始

docker安装

大部分Linux,比如说Ubuntu,Debian都可以通过如下命令安装:

curl -sSL https://get.daocloud.io/docker | sh 

TIP:别忘了配置好DaoCloud加速,不然构建速度很慢。

构建

docker build -t hexo3 - < hexo3.dockerfile

hexo3.dockerfile 如下:

FROM node:slim
MAINTAINER Jianying Li 
# instal basic tool
RUN apt-get update && apt-get install -y git ssh-client ca-certificates --no-install-recommends && rm -r /var/lib/apt/lists/*
# set time zone
RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
# install hexo
RUN npm install hexo@3.0.0 -g
# set base dir
RUN mkdir /hexo
# set home dir
WORKDIR /hexo
EXPOSE 4000
CMD ["/bin/bash"]

定制自己的image请注意,现在最简洁的三个包内容为:

  1. git,部署的时候用(如果不用git部署请去掉)。
  2. ssh-client(ssh方式的git部署依赖)。
  3. ca-certificates(https方式的git部署依赖)。

TIP: 在shell中或者lib中调用https方式通讯的时候如果报错

Problem with the SSL CA cert (path? access rights?)

可以通过安装包:ca-certificates 来解决问题,yum apt中都是如此。

构建时间大概十几分钟完成。

准备把实体机(host)上的文件挂载到docker中

  1. 安装Guest Additions, 因为要使用Shared Floader。
  2. 使用命令 sudo mount -t vboxsf [sharename] [dist]来挂载共享目录。

运行

docker run -it -d -p 4000:4000 -v /root/blog:/hexo/ --name hexo hexo3

注意路径 /root/blog/ 是我VirtualBox 虚拟机中blog存储的位置。

注意参数/root/blog/需要使用绝对路径

其他的参数可以很容易的在manual中找到意义。

备份与还原

#docker save hexo3 > /root/hexo3.tar
#docker load < /root/hexo3.tar

注意这里使用save而不是export 因为需要保存历史层

参考导出大小:

du -h /root/hexo3.tar
261M	/root/hexo3.tar

从以上所有的工作中,对比虚拟机进行环境的构建打包,docker具有构建环境时间更短,打包文件更小的特点。

使用容器操作blog

docker exec -it hexo /bin/bash

Tip: 虽然做到了用docker构建一个非常方便移植的hexo环境,但是运行命令hexo的时候有点慢,但不是那种忍受不了的慢。

小技巧

在调试的时候可以使用 docker rm $(docker ps -q -a) 一次性删除所有的容器,docker rmi $(docker images -q) 一次性删除所有的镜像。

来源:http://philo.top/2015/05/28/Build-Hexo-env-by-docker-Under-OSX/

Linux:使用 ARChon 运行时环境在 Ubuntu 上运行 Android 应用

在此之前,我们尝试过在多款安卓应用模拟器工具上运行安卓应用,比如Genymotion、VirtualBox和Android SDK等。但是,有了这套全新的Chrome安卓运行环境,就可以在Chrome浏览器中运行安卓应用了。所以,下面是一些步骤来指导你如何使用ARChon运行时环境在Ubuntu上安装安卓应用。

谷歌已经公布了首批支持原生运行在Chrome OS的安卓应用,而这个全新的“安卓运行时环境”扩展程序使其成为可能。如今,一位名为Vlad Filippov的开发者已经找到了一种把安卓应用移植到桌面端Chrome浏览器的方法。他把chromeos-apk脚本和ARChon安卓运行环境扩展程序两者紧密结合在一起,使得安卓应用可以运行在Windows、Max和Linux系统的桌面端Chrome浏览器中。

应用借助这种运行环境时的性能并不是很好。同样,由于它是官方运行环境的非官方二次开发包,而且运行在Google的Chrome OS之外,因此一些如摄像头和喇叭等系统内置设备可能需要通过打补丁获得或者根本不支持。

Linux:使用 ARChon 运行时环境在 Ubuntu 上运行 Android 应用
Linux:使用 ARChon 运行时环境在 Ubuntu 上运行 Android 应用

安装Chrome

首先,需要在机器上安装Chrome,版本要求是Chrome 37或者更高。可以从Chrome浏览器的下载页面下载。

如果打算安装开发通道版本,按照如下操作。

使用这个命令为Google Chrome添加软件源列表:

$ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'

Adding google source list

添加完软件源列表后,使用下列命令更新本地的软件库索引。

$ sudo apt-get update

现在,就可以安装非稳定版的google chrome,即开发版:

$ sudo apt-get install google-chrome-unstable
Linux:使用 ARChon 运行时环境在 Ubuntu 上运行 Android 应用
Linux:使用 ARChon 运行时环境在 Ubuntu 上运行 Android 应用

安装Archon运行时环境

接下来,需要下载定制版的运行环境安装包,因为官方版本不被Google或Vlad Filippov创建的Chromium安卓运行环境认可。它在很多方面有别于官方版本,主要区别是它可以用于Google浏览器的各个桌面端。下面是需要下载的运行环境安装包,请根据所安装的Ubuntu系统位数选择下列的一种。

32位 Ubntu发行版:

64位 Ubntu发行版:

下载好运行环境安装包后,从.zip文件中解压,并将解压得到的目录移动到Home目录。操作命令如下:

$ wget https://github.com/vladikoff/chromeos-apk/releases/download/v3.0.0/ARChon-v1.1-x86_32.zip
Linux:使用 ARChon 运行时环境在 Ubuntu 上运行 Android 应用
Linux:使用 ARChon 运行时环境在 Ubuntu 上运行 Android 应用
$ unzip ARChon-v1.1-x86_32.zip ~/

接下来是安装运行时环境,首先打开Google Chrome浏览器,在地址栏键入chrome://extensions。然后,选中“开发者模式”。最后,点击“载入未打包扩展程序”,选择刚才放置在~/Home下面的文件夹。

安装 ChromeOS-APK

如果要用到上面提到的那些应用,那么手动转换这些APK无需复杂的操作——只需要安装“chromeos-apk”命令行JavaScript工具。可以在Node Package Modules(npm)管理器中安装它。为了安装npm和chromeos-apk,在shell或终端中运行下面命令:

$ sudo apt-get install npm nodejs nodejs-legacy

如果操作系统是64位,需要安装下面这个库,命令如下:

$ sudo apt-get install lib32stdc++6

然后,运行这条命令来安装最新的chromeos-apk:

$ npm install -g chromeos-apk@latest
Linux:使用 ARChon 运行时环境在 Ubuntu 上运行 Android 应用
Linux:使用 ARChon 运行时环境在 Ubuntu 上运行 Android 应用

取决于系统配置,可能需要以sudo权限运行后一条命令。

现在,我们将找一个应用程序的APK来在Google浏览器上试一试,但务必牢记并非所有的安卓应用都可以,有一些可能不稳定或者缺少某些特性。大部分安装即用的通讯类应用都不适用这个环境。

转换APK

安卓APK放到~/Home下,然后在终端执行下列命令进行转换:

$ chromeos-apk myapp.apk --archon

如果想以全屏模式运行应用,请替换成这条命令:

$ chromeos-apk myapp.apk --archon --tablet

注意:请将myapp.apk替换成待转换的安卓APK应用的文件名。

为了方便,也可以使用Twerk来进行转换,这样可以跳过这一步。

运行安卓Apk

最后,打开chrome浏览器,然后进入chrome://extensions页面,勾选开发者模式。点击“载入未打包扩展程序”按钮,选择上面脚本刚创建的文件夹。

至此,就可以打开Chrome应用启动器运行安卓应用了。

总结

万岁!我们已经成功在Chrome浏览器中安装好安卓Apk应用程序了。这篇文章是关于一款由Vlad Filippov开发的、名为Archon的、时下流行的Chrome安卓运行环境。这个运行环境使用户在Chrome浏览器中运行转换过的Apk文件。目前它还不支持通讯类应用,诸如Whatsapp。因此,如果你有任何问题、建议和反馈,请在下面的评论框中写出来。非常感谢!去拥抱Archon吧!:-)


via: http://linoxide.com/ubuntu-how-to/android-apps-ubuntu-archon-runtime/

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

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

来源:https://linux.cn/article-5544-1.html

Linux:如何在Fedora或CentOS上使用Samba共享文件夹

如今,无论在家里或者是办公场所,不同的电脑之间共享文件夹已不是什么新鲜事了。在这种趋势下,现代操作系统通过网络文件系统的方式使得电脑间数据的交换变得简单而透明。如果您工作的环境中既有微软的Windows又有Linux,那么,一个共享文件及目录的方式便是通过一个跨平台网络文件共享协议:SMB/CIFS。Windows原生的支持SMB/CIFS,Linux也通过开源的软件Samba实现了SMB/CIFS协议。

Linux:如何在Fedora或CentOS上使用Samba共享文件夹
Linux:如何在Fedora或CentOS上使用Samba共享文件夹

在这篇文章中,我们将展示如何使用Samba共享文件夹。我们使用的Linux平台是Fedora或CentOS。这篇文章分为四部分。首先,我们在Fedora/CentOS环境下安装Samba。接着,我们讨论如何调整SELinux和防火墙配置以允许Samba的文件共享。最后我们介绍如何使用Samba来共享文件夹。

步骤1:在Fedora和CentOS上安装Samba

首先,安装Samba以及进行一些基本的配置。

检验Samba是否已经安装在您的系统中:

$ rpm -q samba samba-common samba-client

如果上面的命令没有任何输出,这意味着Samba并未安装。这时,应使用下面的命令来安装Samba。

$ sudo yum install samba samba-common samba-client

接下来,创建一个用于在网络中共享的本地文件夹。这个文件夹应该以Samba共享的方式导出到远程的用户。在这个指南中,我们会在顶层文件夹’/’中创建这个文件夹,因此,请确保您有相应的权限。

$ sudo mkdir /shared

如果您想在您的home文件夹内创建共享文件夹(例如,~/shared),您必须激活SELinux中Samba的home文件夹共享选项,具体将在后面提到。

在创建/shared文件夹后,设置文件夹权限以保证其余用户可以访问它。

$ sudo chmod o+rw /shared

如果您不想其他用户对该文件夹拥有写权限,您需要移除命令中的’w’选项。

$ sudo chmod o+r /shared

接下来,创建一个空文件来测试。这个文件可以被用来验证Samba的共享已经被挂载。

$ sudo touch /shared/file1

步骤2:为Samba配置SELinux

接下来,我们需要再次配置SELinux。在Fedora和CentOS发行版中SELinux是默认开启的。SELinux仅在正确的安全配置下才允许Samba读取和修改文件或文件夹。(例如,加上’sambasharet’属性标签)。

下面的命令为文件的配置添加必要的标签:

$ sudo semanage fcontext -a -t samba_share_t "(/.*)?"

将替换为我们之前为Samba共享创建的本地文件夹(例如,/shared):

$ sudo semanage fcontext -a -t samba_share_t "/shared(/.*)?"

我们必须执行restorecon命令来激活修改的标签,命令如下:

$ sudo restorecon -R -v /shared
Linux:如何在Fedora或CentOS上使用Samba共享文件夹
Linux:如何在Fedora或CentOS上使用Samba共享文件夹

为了通过Samba共享在我们home文件夹内的文件夹,我们必须在SELinux中开启共享home文件夹的选项,该选项默认被关闭。下面的命令能达到该效果。如果您并未共享您的home文件夹,那么您可以跳过该步骤。

$ sudo setsebool -P samba_enable_home_dirs 1

步骤3:为Samba配置防火墙

下面的命令用来打开防火墙中Samba共享所需的TCP/UDP端口。

如果您在使用firewalld(例如,在Fedora和CentOS7下),接下来的命令将会永久的修改Samba相关的防火墙规则。

$ sudo firewall-cmd --permanent --add-service=samba

如果您在防火墙中使用iptables(例如,CentOS6或者更早的版本),可以使用下面的命令来打开Samba必要的向外的端口。

$ sudo vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT

然后重启iptables服务:

$ sudo service iptables restart

步骤4:更改Samba配置

后面的步骤用来配置Samba以将本地文件夹导出为Samba共享文件夹。

使用文件编辑器打开Samba配置文件,并将下面的行添加到文件的末尾。

$ sudo nano /etc/samba/smb.conf

[myshare]
comment=my shared files
path=/shared
public=yes
writeable=yes

上面在括号内的文本(例如,”myshare”)是Samba共享的资源的名字,它被用来从远程主机存取Samba共享。

创建Samba用户帐户,这是挂载和导出Samba文件系统所必须的。我们可以使用smbpasswd工具来创建一个Samba用户。注意,Samba用户帐户必须是已有的Linux用户。如果您尝试使用smbpasswd添加一个不存在的用户,它会返回一个错误的消息。

如果您不想使用任何已存在的Linux用户作为Samba用户,您可以在您的系统中创建一个新的用户。为安全起见,设置新用户的登录脚本为/sbin/nologin,并且不创建该用户的home文件夹。

在这个例子中,我们创建了一个名叫”sambaguest”的用户,如下:

$ sudo useradd -M -s /sbin/nologin sambaguest
$ sudo passwd sambaguest
Linux:如何在Fedora或CentOS上使用Samba共享文件夹
Linux:如何在Fedora或CentOS上使用Samba共享文件夹

在创建一个新用户后,使用smbpasswd命令添加Samba用户。当这个命令询问一个密码时,您可以键入一个与其用户密码不同的密码。

$ sudo smbpasswd -a sambaguest

激活Samba服务,并检测Samba服务是否在运行。

$ sudo systemctl enable smb.service $ sudo systemctl start smb.service $ sudo systemctl is-active smb
Linux:如何在Fedora或CentOS上使用Samba共享文件夹
Linux:如何在Fedora或CentOS上使用Samba共享文件夹

使用下面的命令来查看Samba中共享的文件夹列表。

$ smbclient -U sambaguest -L localhost
Linux:如何在Fedora或CentOS上使用Samba共享文件夹
Linux:如何在Fedora或CentOS上使用Samba共享文件夹

接下来是在Thunar文件管理器中访问Samba共享文件夹以及对file1进行拷贝复制的截图。注意,Samba的共享内容可以通过在Thunar中通过 smb:///myshare这个地址来访问。

Linux:如何在Fedora或CentOS上使用Samba共享文件夹
Linux:如何在Fedora或CentOS上使用Samba共享文件夹

via: http://xmodulo.com/share-directory-samba-fedora-centos.html

作者:Kristophorus Hadiono 译者:wwy-hust 校对:wxy

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

来源:https://linux.cn/article-5547-1.html

Linux:如何在 Docker 容器之间设置网络

你也许已经知道了,Docker 容器技术是现有的成熟虚拟化技术的一个替代方案。它被企业应用在越来越多的领域中,比如快速部署环境、简化基础设施的配置流程、多客户环境间的互相隔离等等。当你开始在真实的生产环境使用 Docker 容器去部署应用沙箱时,你可能需要用到多个容器部署一套复杂的多层应用系统,其中每个容器负责一个特定的功能(例如负载均衡、LAMP 栈、数据库、UI 等)。

那么问题来了:有多台宿主机,我们事先不知道会在哪台宿主机上创建容器,如果保证在这些宿主机上创建的容器们可以互相联网?

联网技术哪家强?开源方案找 weave。这个工具可以为你省下不少烦恼。听我的准没错,谁用谁知道。

于是本教程的主题就变成了“如何使用 weave 在不同主机上的 Docker 容器之间设置网络”。

Weave 是如何工作的

Linux:如何在 Docker 容器之间设置网络
Linux:如何在 Docker 容器之间设置网络

让我们先来看看 weave 怎么工作:先创建一个由多个 peer 组成的对等网络,每个 peer 是一个虚拟路由器容器,叫做“weave 路由器”,它们分布在不同的宿主机上。这个对等网络的每个 peer 之间会维持一个 TCP 链接,用于互相交换拓扑信息,它们也会建立 UDP 链接用于容器间通信。一个 weave 路由器通过桥接技术连接到本宿主机上的其他容器。当处于不同宿主机上的两个容器想要通信,一台宿主机上的 weave 路由器通过网桥截获数据包,使用 UDP 协议封装后发给另一台宿主机上的 weave 路由器。

每个 weave 路由器会刷新整个对等网络的拓扑信息,可以称作容器的 MAC 地址(如同交换机的 MAC 地址学习一样获取其他容器的 MAC 地址),因此它可以决定数据包的下一跳是往哪个容器的。weave 能让两个处于不同宿主机的容器进行通信,只要这两台宿主机在 weave 拓扑结构内连到同一个 weave 路由器。另外,weave 路由器还能使用公钥加密技术将 TCP 和 UDP 数据包进行加密。

准备工作

在使用 weave 之前,你需要在所有宿主机上安装 Docker 环境,参考这些教程,在 Ubuntu 或 CentOS/Fedora 发行版中安装 Docker。

Docker 环境部署完成后,使用下面的命令安装 weave:

$ wget https://github.com/zettio/weave/releases/download/latest_release/weave
$ chmod a+x weave
$ sudo cp weave /usr/local/bin

注意你的 PATH 环境变量要包含 /usr/local/bin 这个路径,请在 /etc/profile 文件中加入一行(LCTT 译注:要使环境变量生效,你需要执行这个命令: source /etc/profile):

export PATH="$PATH:/usr/local/bin"

在每台宿主机上重复上面的操作。

Weave 在 TCP 和 UDP 上都使用 6783 端口,如果你的系统开启了防火墙,请确保这两个端口不会被防火墙挡住。

在每台宿主机上启动 Weave 路由器

当你想要让处于在不同宿主机上的容器能够互相通信,第一步要做的就是在每台宿主机上启动 weave 路由器。

第一台宿主机,运行下面的命令,就会创建并开启一个 weave 路由器容器(LCTT 译注:前面说过了,weave 路由器也是一个容器):

$ sudo weave launch

第一次运行这个命令的时候,它会下载一个 weave 镜像,这会花一些时间。下载完成后就会自动运行这个镜像。成功启动后,终端会输出这个 weave 路由器的 ID 号。

下面的命令用于查看路由器状态:

$ sudo weave status
Linux:如何在 Docker 容器之间设置网络
Linux:如何在 Docker 容器之间设置网络

第一个 weave 路由器就绪了,目前为止整个 peer 对等网络中只有一个 peer 成员。

你也可以使用 docker 的命令来查看 weave 路由器的状态:

$ docker ps

第二台宿主机部署步骤稍微有点不同,我们需要为这台宿主机的 weave 路由器指定第一台宿主机的 IP 地址,命令如下:

$ sudo weave launch 

当你查看路由器状态,你会看到两个 peer 成员:当前宿主机和第一个宿主机。

Linux:如何在 Docker 容器之间设置网络
Linux:如何在 Docker 容器之间设置网络

当你开启更多路由器,这个 peer 成员列表会更长。当你新开一个路由器时,要指定前一个宿主机的 IP 地址,请注意不是第一个宿主机的 IP 地址(LCTT 译注:链状结构)。

现在你已经有了一个 weave 网络了,它由位于不同宿主机的 weave 路由器组成。

把不同宿主机上的容器互联起来

接下来要做的就是在不同宿主机上开启 Docker 容器,并使用虚拟网络将它们互联起来。

假设我们创建一个私有网络 10.0.0.0/24 来互联 Docker 容器,并为这些容器随机分配 IP 地址。

如果你想新建一个能加入 weave 网络的容器,你就需要使用 weave 命令来创建,而不是 docker 命令。原因是 weave 命令内部会调用 docker 命令来新建容器然后为它设置网络。

下面的命令是在宿主机 hostA 上建立一个 Ubuntu 容器,然后将它放到 10.0.0.0/24 网络中,分配的 IP 地址为 10.0.0.1:

hostA:~$ sudo weave run 10.0.0.1/24 -t -i ubuntu

成功运行后,终端会显示出容器的 ID 号。你可以使用这个 ID 来访问这个容器:

hostA:~$ docker attach 

在宿主机 hostB 上,也创建一个 Ubuntu 容器,IP 地址为 10.0.0.2:

hostB:~$ sudo weave run 10.0.0.2/24 -t -i ubuntu

访问下这个容器的控制台:

hostB:~$ docker attach 

这两个容器能够互相 ping 通,你可以通过容器的控制台检查一下。

Linux:如何在 Docker 容器之间设置网络
Linux:如何在 Docker 容器之间设置网络

如果你检查一下每个容器的网络配置,你会发现有一块名为“ethwe”的网卡,你分配给容器的 IP 地址出现在它们那里(比如这里分别是 10.0.0.1 和 10.0.0.2)。

Linux:如何在 Docker 容器之间设置网络
Linux:如何在 Docker 容器之间设置网络

Weave 的其他高级用法

weave 提供了一些非常巧妙的特性,我在这里作下简单的介绍。

应用分离

使用 weave,你可以创建多个虚拟网络,并为每个网络设置不同的应用。比如你可以为一群容器创建 10.0.0.0/24 网络,为另一群容器创建 10.10.0.0/24 网络,weave 会自动帮你维护这些网络,并将这两个网络互相隔离。另外,你可以灵活地将一个容器从一个网络移到另一个网络而不需要重启容器。举个例子:

首先开启一个容器,运行在 10.0.0.0/24 网络上:

$ sudo weave run 10.0.0.2/24 -t -i ubuntu

然后让它脱离这个网络:

$ sudo weave detach 10.0.0.2/24 

最后将它加入到 10.10.0.0/24 网络中:

$ sudo weave attach 10.10.0.2/24 
Linux:如何在 Docker 容器之间设置网络
Linux:如何在 Docker 容器之间设置网络

现在这个容器可以与 10.10.0.0/24 网络上的其它容器进行通信了。这在当你创建一个容器而网络信息还不确定时就很有帮助了。

将 weave 网络与宿主机网络整合起来

有时候你想让虚拟网络中的容器能访问物理主机的网络。或者相反,宿主机需要访问容器。为满足这个功能,weave 允许虚拟网络与宿主机网络整合。

举个例子,在宿主机 hostA 上一个容器运行在 10.0.0.0/24 中,运行使用下面的命令:

hostA:~$ sudo weave expose 10.0.0.100/24

这个命令把 IP 地址 10.0.0.100 分配给宿主机 hostA,这样一来宿主机 hostA 也连到了 10.0.0.0/24 网络上了。显然,你在为宿主机选择 IP 地址的时候,需要选一个没有被其他容器使用的地址。

现在 hostA 就可以访问 10.0.0.0/24 上的所有容器了,不管这些容器是否位于 hostA 上。好巧妙的设定啊,32 个赞!

总结

如你所见,weave 是一个很有用的 docker 网络配置工具。这个教程只是它强悍功能的冰山一角。如果你想进一步玩玩,你可以试试它的以下功能:多跳路由功能,这个在 multi-cloud 环境(LCTT 译注:多云,企业使用多个不同的云服务提供商的产品,比如 IaaS 和 SaaS,来承载不同的业务)下还是很有用的;动态重路由功能是一个很巧妙的容错技术;或者它的分布式 DNS 服务,它允许你为你的容器命名。如果你决定使用这个好东西,欢迎分享你的使用心得。


via: http://xmodulo.com/networking-between-docker-containers.html

作者:Dan Nanni 译者:bazz2 校对:校对者ID

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

来源:https://linux.cn/article-5556-1.html

Linux:12个进程管理命令介绍

执行中的程序在称作进程。当程序以可执行文件存放在存储中,并且运行的时候,每个进程会被动态得分配系统资源、内存、安全属性和与之相关的状态。可以有多个进程关联到同一个程序,并同时执行不会互相干扰。操作系统会有效地管理和追踪所有运行着的进程。

为了管理这些进程,用户应该能够:

  • 查看所有运行中的进程
  • 查看进程消耗资源
  • 定位个别进程并且对其执行指定操作
  • 改变进程的优先级
  • 杀死指定进程
  • 限制进程可用的系统资源等

Linux提供了许多命令来让用户来高效掌控上述的操作。接下来,一个一个的来讲解下。

Linux:12个进程管理命令介绍
Linux:12个进程管理命令介绍

1. ps

‘ps’是Linux 中最基础的浏览系统中的进程的命令。能列出系统中运行的进程,包括进程号、命令、CPU使用量、内存使用量等。下述选项可以得到更多有用的消息。

ps -a - 列出所有运行中/激活进程

Output of "ps -a" command

ps -ef |grep - 列出需要进程
ps -aux - 显示进程信息,包括无终端的(x)和针对用户(u)的进程:如USER, PID, %CPU, %MEM等

2. pstree

linux中,每一个进程都是由其父进程创建的。此命令以可视化方式显示进程,通过显示进程的树状图来展示进程间关系。如果指定了pid了,那么树的根是该pid,不然将会是init(pid: 1)。

Linux:12个进程管理命令介绍
Linux:12个进程管理命令介绍

3. top

‘top’是一个更加有用的命令,可以监视系统中不同的进程所使用的资源。它提供实时的系统状态信息。显示进程的数据包括 PID、进程属主、优先级、%CPU、%memory等。可以使用这些显示指示出资源使用量。

Linux:12个进程管理命令介绍
Linux:12个进程管理命令介绍

4. htop

htop与top很类似,但是htop是交互式的文本模式的进程查看器。它通过文字图形化地显示每一个进程的CPU和内存使用量、swap使用量。使用上下光标键选择进程,F7和F8改变优先级,F9杀死进程。Htop不是系统默认安装的,所以需要额外安装。

Linux:12个进程管理命令介绍
Linux:12个进程管理命令介绍

5. nice

通过nice命令的帮助,用户可以设置和改变进程的优先级。提高一个进程的优先级,内核会分配更多CPU时间片给这个进程。默认情况下,进程以0的优先级启动。进程优先级可以通过top命令显示的NI(nice value)列查看。

进程优先级值的范围从-20到19。值越低,优先级越高。

nice <优先值> <进程名> - 通过给定的优先值启动一个程序

nice command

Linux:12个进程管理命令介绍
Linux:12个进程管理命令介绍

上述命令例子中,可以看到‘top’命令获得了-3的优先值。

6. renice

renice命令类似nice命令。使用这个命令可以改变正在运行的进程优先值。注意,用户只能改变属于他们自己的进程的优先值。

renice -n -p - 改变指定进程的优先值

renice command

初始优先值为0的3806号进程优先值已经变成了4.

renice -u -g - 通过指定用户和组来改变进程优先值

output of renice for a user group

上述例子中,用户为‘mint’的所有进程优先值变为‘-3’。

7. kill

这个命令用于发送信号来结束进程。如果一个进程没有响应杀死命令,这也许就需要强制杀死,使用-9参数来执行。注意,使用强制杀死的时候一定要小心,因为进程没有时机清理现场,也许写入文件没有完成。如果我们不知道进程PID或者打算用名字杀死进程时候,killall就能派上用场。

kill 
kill -9 
killall -9 - 杀死所有拥有同样名字的进程

如果你使用kill,你需要知道进程ID号。pkill是类似的命令,但使用模式匹配,如进程名,进程拥有者等。

pkill <进程名>

kill initiated

kill

8. ulimit

该命令用于控制系统资源在shell和进程上的分配量。对于系统管理员是最有用的,可以管理重度使用和存在性能问题的系统。限制资源大小可以确保重要进程持续运行,其他进程不会占用过多资源。

ulimit -a - 显示当前用户关联的资源限制
Linux:12个进程管理命令介绍
Linux:12个进程管理命令介绍
-f - 最大文件尺寸大小
-v - 最大虚拟内存大小(KB)
-n - 增加最大文件描述符数量
-H : 改变和报告硬限制
-S : 改变和报告软限制

浏览ulimit man页面获取更多选项。

9. w

w 提供当前登录的用户及其正在执行的进程的信息。显示信息头包含信息,如当前时间、系统运行时长、登录用户总数、过去的1,5,15分钟内的负载均衡数。

基于这些用户信息,用户在终止不属于他们的进程时要小心。

'w' command

who是类似命令,提供当前登录用户列表、系统启动时间、运行级别等。

'who' command

whoami 命令输出当前用户ID

'whoami' command

10. pgrep

pgrep的意思是”进程号全局正则匹配输出”。该命令扫描当前运行进程,然后按照命令匹配条件列出匹配结果到标准输出。对于通过名字检索进程号是很有用。

pgrep -u mint sh

这个命令将会显示用户为‘mint’和进程名为‘sh’的进程ID。

output of pgrep

11. fg , bg

有时,命令需要很长的时间才能执行完成。对于这种情况,我们使用‘bg’命令可以将任务放在后台执行,而用‘fg’可以调到前台来使用。

我们可以通过‘&’在后台启动一个程序:

find . -name *iso > /tmp/res.txt &

一个正在运行的程序也可以通过“CTRL+Z”和“bg”命令组合放到后台运行。

find . -name *iso > /tmp/res.txt &     -  启动一个程序
ctrl+z      -   挂起当前执行程序
bg   -  将程序放到后台运行

我们可以使用‘jobs’命令列出所有后台进程。

jobs

使用‘fg’命令可以将后台程序调到前台执行。

fg %进程id

output of fg, bg and jobscommands

12. ipcs

ipcs命令报告进程间通信设施状态。(共享内存,信号量和消息队列)

用-p参数联合-m、-s或-q使用,可以获得相关的进程间通信的进程ID。

ipcs -p -m

下面屏幕截图列出了最近访问了共享内存段的进程的创建者的ID和进程ID。

Linux:12个进程管理命令介绍
Linux:12个进程管理命令介绍

总结

总之 ,这些命令可以帮助管理员修复问题和改善性能。同样作为一名普通用户也需要解决进程出现的问题。所以,熟悉如此繁多的命令,从能有效管理进程是行之有效。


via: http://linoxide.com/linux-command/process-management-commands-linux/

作者:B N Poornima 译者:VicYu/Vic020 校对:wxy

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

来源:https://linux.cn/article-5557-1.html

Linux:如何在Bash Shell脚本中显示对话框

这个教程给出几个如何使用类似zenity和whiptail的工具在Bash Shell 脚本中提供消息/对话框的例子。使用这些工具,你的脚本能够告知用户当前程序运行的状态并能与用户进行交互。这两个工具的不同之处在于显示消息框或者对话框的方式。Zenity用GTK工具包创建图形用户界面,而whiptail则在终端窗口内创建消息框。

Zenity 工具

在Ubuntu中安装zenity,运行:

sudo apt-get install zenity

用zenity创建消息框或者对话框的命令是不言自明的,我们会给你提供一些例子来参考。

创建消息框

zenity --info --title "Information Box" --text "This should be information" --width=300 --height=200
Linux:如何在Bash Shell脚本中显示对话框
Linux:如何在Bash Shell脚本中显示对话框

创建 Yes/No 询问对话框

zenity --question --text "Do you want this?" --ok-label "Yeah" --cancel-label="Nope"

问题截图

创建输入框并将输入值保存到变量中

a=$(zenity --entry --title "Entry box" --text "Please enter the value" --width=300 --height=200)
echo $a
Linux:如何在Bash Shell脚本中显示对话框
Linux:如何在Bash Shell脚本中显示对话框

输入后,值会保存在变量 $a 中。

这是一个获取用户姓名并显示的实际事例。

#!/bin/bash
#
# This script will ask for couple of parameters
# and then continue to work depending on entered values
#
# Giving the option to user
zenity --question --text "Do you want to continue?"
# Checking if user wants to proceed
[ $? -eq 0 ] || exit 1
# Letting user input some values
FIRSTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your first name." --width=300 --height=150)
LASTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your last name." --width=300 --height=150)
AGE=$(zenity --entry --title "Entry box" --text "Please, enter your age." --width=300 --height=150)
# Displaying entered values in information box
zenity --info --title "Information" --text "You are ${FIRSTNAME} ${LASTNAME} and you are ${AGE}(s) old." --width=300 --height=100

这些是运行前面脚本的截图。

例1-问题-1

框1

例1-输入框-1

输入框

例1-输入框-2

输入框

例1-输入框-3

输入框

Linux:如何在Bash Shell脚本中显示对话框
Linux:如何在Bash Shell脚本中显示对话框

信息框

别忘了查看也许能帮助到你的有用的zenity 选项

Whiptail 工具

在Ubuntu上安装whiptail,运行

sudo apt-get install whiptail

用whiptail创建消息框或者对话框的命令也是无需解释的,我们会给你提供一些基本例子作为参考。

创建消息框

whiptail --msgbox "This is a message" 10 40
Linux:如何在Bash Shell脚本中显示对话框
Linux:如何在Bash Shell脚本中显示对话框

创建 Yes/No 对话框

whiptail --yes-button "Yeah" --no-button "Nope" --title "Choose the answer" --yesno "Will you choose yes?" 10 30
Linux:如何在Bash Shell脚本中显示对话框
Linux:如何在Bash Shell脚本中显示对话框

创建有缺省值的输入框

whiptail --inputbox "Enter your number please." 10 30 "10"
Linux:如何在Bash Shell脚本中显示对话框
Linux:如何在Bash Shell脚本中显示对话框

尝试使用输入值要注意的一点是whiptail用stdout显示对话框,用stderr输出值。这样的话,如果你用 var=$(…),你就根本不会看到对话框,也不能获得输入的值。解决方法是交换stdout和stderr。在whiptail命令后面添加 3>&1 1>&2 2>&3 就可以做到。你想获取输入值的任何whiptail命令也是如此。

创建菜单对话框

whiptail --menu "This is a menu. Choose an option:" 20 50 10 1 "first" 2 "second" 3 "third"
Linux:如何在Bash Shell脚本中显示对话框
Linux:如何在Bash Shell脚本中显示对话框

这是一个请求用户输入一个文件夹的路径并输出它的大小的 shell 脚本

#!/bin/bash
#
#
# Since whiptail has to use stdout to display dialog, entered value will
# be stored in stderr. To switch them and get the value to stdout you must
# use 3>&1 1>&2 2>&3
FOLDER_PATH=$(whiptail --title "Get the size of folder"
--inputbox "Enter folder path:"
10 30
"/home"
3>&1 1>&2 2>&3)
if [ -d $FOLDER_PATH ]
then
size=$(du -hs "$FOLDER_PATH" | awk '{print $1}')
whiptail --title "Information"
--msgbox "Size of ${FOLDER_PATH} is ${size}"
10 40
elif [ -f $FOLDER_PATH ]
then
whiptail --title "Warning!!!"
--msgbox "The path you entered is a path to a file not a folder!"
10 40
else
whiptail --title "Error!!!"
--msgbox "Path you entered is not recognized. Please try again"
10 40
fi

这是之前例子的一些截图:

Linux:如何在Bash Shell脚本中显示对话框
Linux:如何在Bash Shell脚本中显示对话框

输入框

Linux:如何在Bash Shell脚本中显示对话框
Linux:如何在Bash Shell脚本中显示对话框

消息框

如果你在终端下工作,帮助手册总是有用的。

结论

选择合适的工具显示对话框取决于你期望在桌面机器还是服务器上运行你的脚本。桌面机器用户通常使用GUI窗口环境,也可能运行脚本并与显示的窗口进行交互。然而,如果你期望用户是在服务器上工作的,(在没有图形界面时,)你也许希望能确保总能显示,那就使用whiptail或者任何其它在纯终端窗口显示对话框的工具。


via: http://linoxide.com/linux-shell-script/bash-shell-script-show-dialog-box/

作者:Ilija Lazarevic 译者:ictlyh 校对:wxy

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

来源:https://linux.cn/article-5558-1.html

Linux:Linux 有问必答: 如何在红帽系linux中编译Ixgbe驱动

提问:我想要安装最新版的ixgbe 10G网卡驱动。在CentOS, Fedora 或 RHEL中,我应该如何编译ixgbe驱动?

想要在linux使用Intel的PCI Express 10G网卡(例如,82598,82599,x540),需要安装Ixgbe驱动。如今的Linux发行版都会预安装ixgbe的可加载模块,但是预安装的ixgbe驱动不是完整功能版。如果想要开启和定制所有10G网卡的功能(如,RSS、多队列、虚拟化功能、硬件 offload 等),需要从源码编译安装。

本文基于红帽系平台(如,CentOS,RHEL或Fedora)。Debian系平台,请看这篇文章

Linux:Linux 有问必答: 如何在红帽系linux中编译Ixgbe驱动
Linux:Linux 有问必答: 如何在红帽系linux中编译Ixgbe驱动

第一步: 安装依赖

首先,安装必要的开发环境和安装匹配的内核头文件

$ sudo yum install gcc make
$ sudo yum install kernel-devel

第二步: 编译Ixgbe

官方页面下载最新Ixgbe源码

$ wget http://downloads.sourceforge.net/project/e1000/ixgbe%20stable/3.23.2/ixgbe-3.23.2.tar.gz

请检查支持的内核版本。例如,Ixgbe3.23.2版本支持Linux内核版本2.6.18到3.18.1。

提取压缩包并编译:

$ tar -xvf ixgbe-3.23.2.tar.gz
$ cd ixgbe-3.23.2/src
$ make

如果成功,可以在当前目录找到编译完成的驱动(ixgbe.ko)。

可以运行这个命令来查看编译信息:

$ modinfo ./ixgbe.ko

将会输出一个Ixgbe驱动的可用参数列表

Linux:Linux 有问必答: 如何在红帽系linux中编译Ixgbe驱动
Linux:Linux 有问必答: 如何在红帽系linux中编译Ixgbe驱动

第三步: 加载 Ixgbe 驱动

这步准备加载已经编译好的驱动。

如果系统已经加载了Ixgbe驱动,首先需要卸载掉老版本。否则,新版本不能加载。

$ sudo rmmod ixgbe.ko

然后插入编译完成的驱动到内核中:

$ sudo insmod ./ixgbe.ko

同时,你可以设置启动参数

$ sudo insmod ./ixgbe.ko FdirPballoc=3 RSS=16

验证驱动是否加载成功,使用dmesg命令,查看其输出

$ dmesg

Intel(R) 10 Gigabit PCI Express Network Driver - version 3.23.2
Copyright (c) 1999-2014 Intel Corporation.
ixgbe 0000:21:00.0: PCI INT A -> GSI 64 (level, low) -> IRQ 64
ixgbe 0000:21:00.0: setting latency timer to 64
ixgbe: Receive-Side Scaling (RSS) set to 16
ixgbe: Flow Director packet buffer allocation set to 3
ixgbe: 0000:21:00.0: ixgbe_check_options: Flow Director will be allocated 256kB of packet buffer
ixgbe: 0000:21:00.0: ixgbe_check_options: FCoE Offload feature enabled
ixgbe 0000:21:00.0: irq 87 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 88 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 89 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 90 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 91 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 92 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 93 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 94 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 95 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 96 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 97 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 98 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 99 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 100 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 101 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 102 for MSI/MSI-X
ixgbe 0000:21:00.0: irq 103 for MSI/MSI-X
ixgbe 0000:21:00.0: eth3: DCA registration failed: -1
ixgbe 0000:21:00.0: PCI Express bandwidth of 32GT/s available
ixgbe 0000:21:00.0: (Speed:5.0GT/s, Width: x8, Encoding Loss:20%)
ixgbe 0000:21:00.0: eth3: MAC: 2, PHY: 9, SFP+: 3, PBA No: E68793-006
ixgbe 0000:21:00.0: 90:e2:ba:5b:e9:1c
ixgbe 0000:21:00.0: eth3: Enabled Features: RxQ: 16 TxQ: 16 FdirHash RSC
ixgbe 0000:21:00.0: eth3: Intel(R) 10 Gigabit Network Connection
ixgbe 0000:21:00.1: PCI INT B -> GSI 68 (level, low) -> IRQ 68
ixgbe 0000:21:00.1: setting latency timer to 64
ixgbe: 0000:21:00.1: ixgbe_check_options: FCoE Offload feature enabled
ixgbe 0000:21:00.0: registered PHC device on eth3
ixgbe 0000:21:00.1: irq 104 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 105 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 106 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 107 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 108 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 109 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 110 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 111 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 112 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 113 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 114 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 115 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 116 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 117 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 118 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 119 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 120 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 121 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 122 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 123 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 124 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 125 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 126 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 127 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 128 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 129 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 130 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 131 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 132 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 133 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 134 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 135 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 136 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 137 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 138 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 139 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 140 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 141 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 142 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 143 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 144 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 145 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 146 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 147 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 148 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 149 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 150 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 151 for MSI/MSI-X
ixgbe 0000:21:00.1: irq 152 for MSI/MSI-X
ADDRCONF(NETDEV_UP): eth3: link is not ready
8021q: adding VLAN 0 to HW filter on device eth3
ixgbe 0000:21:00.1: eth4: DCA registration failed: -1
ixgbe 0000:21:00.1: PCI Express bandwidth of 32GT/s available
ixgbe 0000:21:00.1: (Speed:5.0GT/s, Width: x8, Encoding Loss:20%)
ixgbe 0000:21:00.1: eth4: MAC: 2, PHY: 9, SFP+: 4, PBA No: E68793-006
ixgbe 0000:21:00.1: 90:e2:ba:5b:e9:1e
ixgbe 0000:21:00.1: eth4: Enabled Features: RxQ: 48 TxQ: 48 FdirHash RSC
ixgbe 0000:21:00.1: eth4: Intel(R) 10 Gigabit Network Connection
ixgbe 0000:21:00.0: eth3: detected SFP+: 3
ixgbe 0000:21:00.1: registered PHC device on eth4
ADDRCONF(NETDEV_UP): eth4: link is not ready
8021q: adding VLAN 0 to HW filter on device eth4
ixgbe 0000:21:00.1: eth4: detected SFP+: 4
ixgbe 0000:21:00.0: eth3: NIC Link is Up 10 Gbps, Flow Control: RX/TX
ADDRCONF(NETDEV_CHANGE): eth3: link becomes ready
ixgbe 0000:21:00.1: eth4: NIC Link is Up 10 Gbps, Flow Control: RX/TX
ADDRCONF(NETDEV_CHANGE): eth4: link becomes ready
eth3: no IPv6 routers present
eth4: no IPv6 routers present

第四步: 安装Ixgbe驱动

当确认驱动已经加载后,就可以安装驱动到系统中了

$ sudo make install

ixgbe.ko将会安装在下列目录

/lib/modules//kernel/drivers/net/ixgbe

此时,编译好的驱动将在启动时自动加载,也可以通过运行命令加载它:

$ sudo modprobe ixgbe
Linux:Linux 有问必答: 如何在红帽系linux中编译Ixgbe驱动
Linux:Linux 有问必答: 如何在红帽系linux中编译Ixgbe驱动

via: http://ask.xmodulo.com/compile-ixgbe-driver-centos-rhel-fedora.html

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

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

来源:https://linux.cn/article-5562-1.html

Linux:如何在Linux下使用Gitblit工具创建Git仓库服务

嗨!朋友,今天我们将学习如何在你的Linux服务器或者PC上安装Gitblit工具。首先,我们看看什么是Git,它的功能以及安装Gitblit的步骤。Git是分布式版本控制系统,它强调速度、数据一致性,并且支持分布式、非线性工作流。它最初由Linus Torvalds在2005年为Linux内核设计和开发,使用GPLv2证书,并从此成为软件开发中使用最广泛的版本控制系统。

Gitblit是完全开源的软件,它基于纯粹的Java堆栈,被设计以在Git仓库速度和效率方面胜任从小型到极大型的项目。它很容易学习和上手,并有着闪电般的性能。它在很多方面远胜 Subversion、CVS、Perforce和ClearCase等SCM(版本控制)工具,比如,如快速本地分支、易于暂存、多工作流等。

Linux:如何在Linux下使用Gitblit工具创建Git仓库服务
Linux:如何在Linux下使用Gitblit工具创建Git仓库服务

Gitblit的功能

  • 它可以做为一个哑仓库视图,没有管理控制以及用户账户。
  • 它可以做为完整的Git服务,拥有克隆、推送和仓库访问控制。
  • 它能独立于其他Git工具使用(包括实际的Git),它能和您已有的工具协作。

1.创建Gitblit安装目录

首先我们将在我们的服务器上建立一个目录,并在该目录下安装最新的Gitblit。

$ sudo mkdir -p /opt/gitblit
$ cd /opt/gitblit

创建gitblit目录

2. 下载并解压

现在,我们将从Gitblit官方站点下载最新版的Gitblit。这里我们将安装1.6.2版本。所以,请在安装时根据具体的版本对命令进行修改。

$ sudo wget http://dl.bintray.com/gitblit/releases/gitblit-1.6.2.tar.gz
Linux:如何在Linux下使用Gitblit工具创建Git仓库服务
Linux:如何在Linux下使用Gitblit工具创建Git仓库服务

接下来,我们将下载到的tar压缩包解压至之前创建的目录 /opt/gitblit/

$ sudo tar -zxvf gitblit-1.6.2.tar.gz
Linux:如何在Linux下使用Gitblit工具创建Git仓库服务
Linux:如何在Linux下使用Gitblit工具创建Git仓库服务

3.配置并运行

现在,我们将对Gitblit进行配置。如果你想要定制Gitblit的行为,你可以修改gitblit/data/gitblit.properties。在完成配置后,我们将运行安装好的gitblit。有两种方式来运行gitblit,第一种是通过下面的命令手动运行:

$ sudo java -jar gitblit.jar --baseFolder data

另一种是将gitblit添加为服务。下面是在linux下将gitblit添加为服务的步骤。

由于我在使用Ubuntu,下面的命令将是 sudo cp service-ubuntu.sh /etc/init.d/gitblit,所以请根据你的发行版修改文件名service-ubuntu.sh为相应的你运行的发行版。

$ sudo ./install-service-ubuntu.sh
$ sudo service gitblit  start
Linux:如何在Linux下使用Gitblit工具创建Git仓库服务
Linux:如何在Linux下使用Gitblit工具创建Git仓库服务

在你的浏览器中打开http://localhost:8080https://localhost:8443,也可以将localhost根据本地配置替换为IP地址。输入默认的管理员凭证:admin / admin并点击login按钮。

Linux:如何在Linux下使用Gitblit工具创建Git仓库服务
Linux:如何在Linux下使用Gitblit工具创建Git仓库服务

现在,我们将添加一个新的用户。首先,你需要以admin用户登录,username = admin,password = admin

然后,点击用户图标 > users > (+) new user 来创建一个新用户,如下图所示。

Linux:如何在Linux下使用Gitblit工具创建Git仓库服务
Linux:如何在Linux下使用Gitblit工具创建Git仓库服务

现在,我们将创建一个开箱可用的仓库。点击 repositories > (+) new repository。然后,如下图所示添加新的仓库。

Linux:如何在Linux下使用Gitblit工具创建Git仓库服务
Linux:如何在Linux下使用Gitblit工具创建Git仓库服务

使用命令行创建一个新的仓库

    touch README.md
    git init
    git add README.md
    git commit -m "first commit"
    git remote add origin ssh://arunlinoxide@localhost:29418/linoxide.com.git
    git push -u origin master

请将其中的用户名arunlinoxide替换为你添加的用户名。

在命令行中push一个已存在的仓库

    git remote add origin ssh://arunlinoxide@localhost:29418/linoxide.com.git
    git push -u origin master

注意:强烈建议所有人修改用户名“admin”的密码。

结论

欢呼吧!我们已经在Linux电脑中安装好了最新版本的Gitblit。接下来我们便可以在我们的大小项目中享受这样一个优美的版本控制系统。有了Gitblit,版本控制便再容易不过了。它有易于学习、轻量级、高性能的特点。因此,如果你有任何的问题、建议和反馈,请在留言处留言。


via: http://linoxide.com/linux-how-to/serve-git-repositories-gitblit/

作者:Arun Pyasi 译者:wwy-hust 校对:wxy

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

来源:https://linux.cn/article-5559-1.html

Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点

大家好,今天我们来学习一下如何在 Docker 容器里运行的 Nginx Web 服务器中安装 WordPress。WordPress 是一个很好的免费开源的内容管理系统,全球成千上万的网站都在使用它。Docker 是一个开源项目,提供了一个可以打包、装载和运行任何应用的轻量级容器的开放平台。它没有语言支持、框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行。这使它们可以不依赖于特定软件栈和供应商,像一块块积木一样部署和扩展网络应用、数据库和后端服务。

今天,我们会在 docker 容器上部署最新的 WordPress 软件包,包括需要的前提条件,例如 Nginx Web 服务器、PHP5、MariaDB 服务器等。下面是在运行在 Docker 容器上成功安装 WordPress 的简单步骤。

1. 安装 Docker

在我们真正开始之前,我们需要确保在我们的 Linux 机器上已经安装了 Docker。我们使用的主机是 CentOS 7,因此我们用下面的命令使用 yum 管理器安装 docker。

# yum install docker
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点
# systemctl restart docker.service

2. 创建 WordPress 的 Dockerfile

我们需要创建用于自动安装 wordpress 以及其前置需求的 Dockerfile。这个 Dockerfile 将用于构建 WordPress 的安装镜像。这个 WordPress Dockerfile 会从 Docker Registry Hub 获取 CentOS 7 镜像并用最新的可用更新升级系统。然后它会安装必要的软件,例如 Nginx Web 服务器、PHP、MariaDB、Open SSH 服务器,以及其它保证 Docker 容器正常运行不可缺少的组件。最后它会执行一个初始化 WordPress 安装的脚本。

# nano Dockerfile

然后,我们需要将下面的配置行添加到 Dockerfile中。

FROM centos:centos7
MAINTAINER The CentOS Project 
RUN yum -y update; yum clean all
RUN yum -y install epel-release; yum clean all
RUN yum -y install mariadb mariadb-server mariadb-client nginx php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy php-apc pwgen python-setuptools curl git tar; yum clean all
ADD ./start.sh /start.sh
ADD ./nginx-site.conf /nginx.conf
RUN mv /nginx.conf /etc/nginx/nginx.conf
RUN rm -rf /usr/share/nginx/html/*
RUN /usr/bin/easy_install supervisor
RUN /usr/bin/easy_install supervisor-stdout
ADD ./supervisord.conf /etc/supervisord.conf
RUN echo %sudo ALL=NOPASSWD: ALL >> /etc/sudoers
ADD http://wordpress.org/latest.tar.gz /wordpress.tar.gz
RUN tar xvzf /wordpress.tar.gz
RUN mv /wordpress/* /usr/share/nginx/html/.
RUN chown -R apache:apache /usr/share/nginx/
RUN chmod 755 /start.sh
RUN mkdir /var/run/sshd
EXPOSE 80
EXPOSE 22
CMD ["/bin/bash", "/start.sh"]
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点

3. 创建启动脚本

我们创建了 Dockerfile 之后,我们需要创建用于运行和配置 WordPress 安装的脚本,名称为 start.sh。它会为 WordPress 创建并配置数据库和密码。用我们喜欢的文本编辑器打开 start.sh。

# nano start.sh

打开 start.sh 之后,我们要添加下面的配置行到文件中。

#!/bin/bash
__check() {
if [ -f /usr/share/nginx/html/wp-config.php ]; then
exit
fi
}
__create_user() {
# 创建用于 SSH 登录的用户
SSH_USERPASS=`pwgen -c -n -1 8`
useradd -G wheel user
echo user:$SSH_USERPASS | chpasswd
echo ssh user password: $SSH_USERPASS
}
__mysql_config() {
# 启用并运行 MySQL
yum -y erase mariadb mariadb-server
rm -rf /var/lib/mysql/ /etc/my.cnf
yum -y install mariadb mariadb-server
mysql_install_db
chown -R mysql:mysql /var/lib/mysql
/usr/bin/mysqld_safe &
sleep 10
}
__handle_passwords() {
# 在这里我们生成随机密码(多亏了 pwgen)。前面两个用于 mysql 用户,最后一个用于 wp-config.php 的随机密钥。
WORDPRESS_DB="wordpress"
MYSQL_PASSWORD=`pwgen -c -n -1 12`
WORDPRESS_PASSWORD=`pwgen -c -n -1 12`
# 这是在日志中显示的密码。
echo mysql root password: $MYSQL_PASSWORD
echo wordpress password: $WORDPRESS_PASSWORD
echo $MYSQL_PASSWORD > /mysql-root-pw.txt
echo $WORDPRESS_PASSWORD > /wordpress-db-pw.txt
# 这里原来是一个包括 sed、cat、pipe 和 stuff 的很长的行,但多亏了
#  @djfiander 的 https://gist.github.com/djfiander/6141138
# 现在没有了
sed -e "s/database_name_here/$WORDPRESS_DB/
s/username_here/$WORDPRESS_DB/
s/password_here/$WORDPRESS_PASSWORD/
/'AUTH_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/
/'SECURE_AUTH_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/
/'LOGGED_IN_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/
/'NONCE_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/
/'AUTH_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/
/'SECURE_AUTH_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/
/'LOGGED_IN_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/
/'NONCE_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/" /usr/share/nginx/html/wp-config-sample.php > /usr/share/nginx/html/wp-config.php
}
__httpd_perms() {
chown apache:apache /usr/share/nginx/html/wp-config.php
}
__start_mysql() {
# systemctl 启动 mysqld 服务
mysqladmin -u root password $MYSQL_PASSWORD
mysql -uroot -p$MYSQL_PASSWORD -e "CREATE DATABASE wordpress; GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY '$WORDPRESS_PASSWORD'; FLUSH PRIVILEGES;"
killall mysqld
sleep 10
}
__run_supervisor() {
supervisord -n
}
# 调用所有函数
__check
__create_user
__mysql_config
__handle_passwords
__httpd_perms
__start_mysql
__run_supervisor
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点

增加完上面的配置之后,保存并关闭文件。

4. 创建配置文件

现在,我们需要创建 Nginx Web 服务器的配置文件,命名为 nginx-site.conf。

# nano nginx-site.conf

然后,增加下面的配置信息到配置文件。

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
index index.html index.htm index.php;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
root /usr/share/nginx/html;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root /usr/share/nginx/html;
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /.ht {
# deny all;
#}
}
}
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点

现在,创建 supervisor.conf 文件并添加下面的行。

# nano supervisord.conf

然后,添加以下行。

[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
[program:php-fpm]
command=/usr/sbin/php-fpm -c /etc/php/fpm
stdout_events_enabled=true
stderr_events_enabled=true
[program:php-fpm-log]
command=tail -f /var/log/php-fpm/php-fpm.log
stdout_events_enabled=true
stderr_events_enabled=true
[program:mysql]
command=/usr/bin/mysql --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
stdout_events_enabled=true
stderr_events_enabled=true
[program:nginx]
command=/usr/sbin/nginx
stdout_events_enabled=true
stderr_events_enabled=true
[eventlistener:stdout]
command = supervisor_stdout
buffer_size = 100
events = PROCESS_LOG
result_handler = supervisor_stdout:event_handler
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点

添加完后,保存并关闭文件。

5. 构建 WordPress 容器

现在,完成了创建配置文件和脚本之后,我们终于要使用 Dockerfile 来创建安装最新的 WordPress CMS(译者注:Content Management System,内容管理系统)所需要的容器,并根据配置文件进行配置。做到这点,我们需要在对应的目录中运行以下命令。

# docker build --rm -t wordpress:centos7 .
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点

6. 运行 WordPress 容器

现在,执行以下命令运行新构建的容器,并为 Nginx Web 服务器和 SSH 访问打开88 和 22号相应端口 。

# CID=$(docker run -d -p 80:80 wordpress:centos7)

运行 WordPress Docker

运行以下命令检查进程以及容器内部执行的命令。

#  echo "$(docker logs $CID )"

运行以下命令检查端口映射是否正确。

# docker ps

docker 状态

7. Web 界面

最后如果一切正常的话,当我们用浏览器打开 http://ip-address/ 或者 http://mywebsite.com/ 的时候会看到 WordPress 的欢迎界面。

Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点

现在,我们将通过 Web 界面为 WordPress 面板设置 WordPress 的配置、用户名和密码。

Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点

然后,用上面用户名和密码输入到 WordPress 登录界面。

Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点
Linux:如何在 Docker 容器中架设一个完整的 WordPress 站点

总结

我们已经成功地在以 CentOS 7 作为 docker OS 的 LEMP 栈上构建并运行了 WordPress CMS。从安全层面来说,在容器中运行 WordPress 对于宿主系统更加安全可靠。这篇文章介绍了在 Docker 容器中运行的 Nginx Web 服务器上使用 WordPress 的完整配置。如果你有任何问题、建议、反馈,请在下面的评论框中写下来,让我们可以改进和更新我们的内容。非常感谢!Enjoy 🙂


via: http://linoxide.com/linux-how-to/install-wordpress-nginx-docker-container/

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

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

来源:https://linux.cn/article-5560-1.html

Linux:在 Kubuntu 15.04 中升级 KDE Plasma 5.3

Linux:在 Kubuntu 15.04 中升级 KDE Plasma 5.3
Linux:在 Kubuntu 15.04 中升级 KDE Plasma 5.3

KDE已经发布了Plasma 5.3的稳定版,它包含了一个新的电源管理方面的稳定特性。

先前四月份的beta版已经让我们印象深刻,甚至跃跃欲试了,Plasma 5桌面环境的稳定版更新的最新更新已经稳定,并且可以下载了。

Plasma 5.3继续改善和细化了全新的KDE桌面,它添加了大量的特性供桌面用户体验。同时也修复了多达400个错误,这对性能和稳定性方面也进行了大量改善。

Plasma 5.3中的新东西

Linux:在 Kubuntu 15.04 中升级 KDE Plasma 5.3
Linux:在 Kubuntu 15.04 中升级 KDE Plasma 5.3

Plasma 5.3中更好的蓝牙管理

在早期关于Plasma 5.3的文章中,我们触及了大量新特性,这其中很多都值得反复说道说道。

加强的电源管理特性和配置选项,包括新的电源小程序、能源使用监控动态屏幕亮度变化,将有助于让KDE在移动设备上加强续航能力。

在连接了外部监视器的时候合上笔记本盖子时,不会再触发‘挂起’操作。这个新的行为被称之为‘影院模式’,并且默认开启。但是,可以通功过电源管理设置中的相关选项禁用。

蓝牙功能被改善,带来了一个全新的面板小程序,使得在连接到并配置配对的蓝牙设备,如智能手机、键盘和扬声器时,比以往更为便捷。

同样,对于Plasma 5.3,KDE中的轨迹板配置更为方便,这多亏了新的安装和设置模块。

Linux:在 Kubuntu 15.04 中升级 KDE Plasma 5.3
Linux:在 Kubuntu 15.04 中升级 KDE Plasma 5.3

轨迹板、触控板。Tomato, Tomayto。

对于Plasma小部件狂热者,它带来了一个按住并锁定手势。当启用该功能,会隐藏移动鼠标时出现的设置处理。取而代之的是,它只会在长点击小部件时发生该行为。

谈到widget-y这类事情时,该发布版中再次引入了几个旧的Plasmoid中最受欢迎的东西,包括一个有用的系统监视器、便利的硬盘驱动器统计和一个漫画阅读器。

了解更多&尝试

Plasma 5.3中在官方修改日志中列出了新的和改进的内容,这是全部内容的完整列表。

你可以从KDE社区获取Live镜像,试用Kubuntu上的Plasma 5.3,而不会影响到你自己的系统

如果你需要超级稳定的系统,你可以使用这些镜像来尝试新特性,但是你可以继续使用你的主要计算机上与你的版本对应的KDE版本。

不过,如果你对实验版满意——请注意:能够处理任何包冲突,或者由尝试升级桌面环境而导致的系统问题——那么你可以安装。

安装Plasma 5.3到Kubuntu 15.04

Linux:在 Kubuntu 15.04 中升级 KDE Plasma 5.3
Linux:在 Kubuntu 15.04 中升级 KDE Plasma 5.3

安装Plasma 5.3到Kubuntu 15.04中,你需要添加KDE 移植PPA,运行软件更新器工具并安装任何可用的更新。

Kubuntu移植PPA可能也会升级除了安装在你系统上的Plasma外的其它KDE平台组件,包括KDE应用程序、框架和Kubuntu特定配置文件。

目前为止,使用命令行来升级Kubuntu中的到Plasma 5.3是最快速的方法:

sudo add-apt-repository ppa:kubuntu-ppa/backports
sudo apt-get update && sudo apt-get dist-upgrade

在升级过程完成后,如果一切顺利,你应该重启计算机。

如果你正在使用一个备用桌面环境,比如LXDE、Unity或者GNOME,则你需要在运行完上面的两个命令后安装Kubuntu桌面包(你可以在Ubuntu软件中心找到)。

要降级到15.04中自带的 Plasma 版本的话,你可以使用 PPA-Purge 工具:

sudo apt-get install ppa-purge
sudo ppa-purge ppa:kubuntu-ppa/backports

请在下面的评论中留言,让我们知道你怎么升级,测试过程是怎样的,别忘了告诉我们你在下一个Plasma 5桌面中要看到的特性。


via: http://www.omgubuntu.co.uk/2015/04/kde-plasma-5-3-released-heres-how-to-upgrade-in-kubuntu-15-04

作者:Joey-Elijah Sneddon 译者:GOLinux 校对:wxy

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

来源:https://linux.cn/article-5561-1.html

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

如果你在一个远程的VPS上运行了MySQL服务器,你会如何管理你的远程数据库主机呢?基于web的数据库管理工具例如phpMyAdmin或者Adminer可能会是你第一个想起的。这些基于web的管理工具需要一个正常运行的后端的web服务和PHP引擎。但是,如果你的VPS仅仅用来做数据库服务(例如,数据库与其它服务独立存放的分布式结构),为偶尔的数据库管理提供一整套的LAMP是浪费VPS资源的。更糟的是,LAMP所打开的HTTP端口可能会成为你VPS资源的安全漏洞。

作为一种选择,你可以使用在一台客户机上运行本地的MySQL客户端,当然,如果没有别的选择,一个纯净的MySQL命令行客户端将是你的默认选择。但是命令行客户端的功能是有限的,因为它没有生产级数据库管理功能,例如:可视化SQL开发、性能调优、模式验证等等。你是否在寻找一个成熟的MySQL管理工具,那么一个MySQL的图形化管理工具将会更好的满足你的需求。

什么是MySQL Workbench?

作为一个由Oracle开发的集成的数据库管理工具,MySQL Workbench不仅仅是一个简单的MySQL客户端。简而言之,Workbench是一个跨平台的(如:Linux,MacOX,Windows)数据库设计、开发和管理的图形化工具。MySQL Workbench 社区版是遵循GPL协议的。作为一个数据库管理者,你可以使用Workbench去配置MySQL服务、管理MySQL用户、进行数据库的备份与还原、监视数据库的健康状况,所有的都在对用户友好的图形化环境下处理。

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

在这个手册里,让我们演示下如何在Linux下安装和使用MySQL Workbench。

在Linux上安装MySQL Workbench

你可以在任何一个桌面linux机器上运行MySQL Workbench来设置你的数据库管理环境。虽然一些Linux发行版(例如:Debian/Ubuntu)在他们的软件源中已经有了MySQL Workbench,但是从官方源中安装是一个好的方法,因为他们提供了最新的版本。这里介绍了如何设置一个官方的Workbench软件源和从中安装它。

基于 Debian 的桌面 (Debia, Ubuntu, Mint):

到其官方站点,选择一个和你环境匹配的DEB文件,并下载安装:

例如,对于 Ubuntu 14.10:

$ wget http://dev.mysql.com/get/mysql-apt-config_0.3.4-2ubuntu14.10_all.deb
$ sudo dpkg -i mysql-apt-config_0.3.4-2ubuntu14.10_all.deb

对于 Debian 7:

$ wget http://dev.mysql.com/get/mysql-apt-config_0.3.3-1debian7_all.deb
$ sudo dpkg -i mysql-apt-config_0.3.3-1debian7_all.deb

当你安装DEB文件时,你会看到下面的配置菜单,并且选择配置那个MySQL产品

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

选择“Utilities”。完成配置后,选择“Apply”去保存配置。然后,更新包索引,并且安装Workbench。

$ sudo apt-get update
$ sudo apt-get install mysql-workbench

基于 Red Hat 的桌面 (CentOS, Fedora, RHEL):

去官网下载并安装适合你Linux环境的RPM源包。

例如,对于 CentOS 7:

$ wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
$ sudo yum localinstall mysql-community-release-el7-5.noarch.rpm

对于 Fedora 21:

$ wget http://dev.mysql.com/get/mysql-community-release-fc21-6.noarch.rpm
$ sudo yum localinstall mysql-community-release-fc21-6.noarch.rpm

验证”MySQL Tools Community”源是否被安装:

$ yum repolis enabled
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

安装Workbench

$ sudo yum install mysql-workbench-community

设置远程数据库的安全连接

接下来是为你运行MySQL服务的VPS设置一个远程连接。当然,你可以直接通过图形化的Workbench连接你的远程MySQL服务器(在数据库开放了远程连接后)。然而,这样做有很大的安全风险,因为有些人很容易窃听你的数据库传输信息,并且一个公开的MySQL端口(默认为3306)会是另外一个攻击入口。

一个比较好的方法是关掉远程访问数据库服务功能,(仅允许在VPS 上的127.0.0.1访问)。然后在本地客户机和远程VPS之间设置一个SSH隧道,这样的话,和MySQL之间的数据能安全地通过它的本地回环接口上中继。相比较设置一个SSL加密的连接来说,配置SSH隧道需要很少的操作,因为它仅仅需要SSH服务,并且在大多数的VPS上已经部署了。

让我们来看看如何来为一个MySQL Workbench设置一个SSH隧道。

在这个设置里,不需要你开放远程访问MySQL服务。

在一个运行了Workbench的本地客户机上,键入下面的命令,替换’user’(远程 VPS 的用户名)和’remote_vps’(远程 VPS 的地址)为你自己的信息:

$ ssh user@remote_vps -L 3306:127.0.0.1:3306 -N

你会被要求输入你VPS的SSH密码,当你成功登陆VPS后,在本地的3306端口和远程VPS的3306端口之间将会建立一个SSH隧道。这里你不会在前台看到任何信息显示。

或者你可以选择在后台运行SSH隧道,按CTRL+Z停止当前的命令,然后输入bg并且ENTER

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

这样SSH隧道就会在后台运行了。

使用MySQL Workbench远程管理MySQL服务

在建立好SSH隧道后,你可以通过MySQL Workbench去远程连接MySQL服务了。

输入下面命令启动Workbench:

$ mysql-workbench
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

点击Workbench页面上面的“加号”图标去创建一个新的数据库连接,接着会出现下面的连接信息。

  • Connection Name: 任意描述 (例如: My remote VPS database)
  • Hostname: 127.0.0.1
  • Port: 3306
  • Username: MySQL 用户名 (例如 root)
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

注意:因为隧道设置的是127.0.0.1:3306,所以主机名字段必须是127.0.0.1,而不能是远程VPS的IP地址或者主机名。

当你设置好一个新的数据库连接后,你会在Workbench窗口看到一个新的框,点击那个框就会实际去连接远程的MySQL服务了。

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

当你登录到MySQL 服务器后,你可以再左侧面板看到各种管理任务。让我们来看一些常见的管理任务。

MySQL Server Status

该菜单显示了展示数据库服务器的资源使用情况的实时监控面板。(例如:流量、链接、读写)

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

Client Connections

客户端连接数是一个极其重要的监控的资源,这个菜单显示了每个连接的详细信息。

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

用户和权限

这个菜单允许你管理MySQL用户,包括他们的资源限制和权限。

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

MySQL Server Administration

你可以启动或关闭MySQL服务,并且检查它的服务日志。

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

Database Schema Management

可以可视化的查看、更改、检查数据库结构,在“Schemas”标题下选择任何一个数据库或表,然后右击

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

Database Query

你可以执行任何的语句(只要你的权限允许),并且检查其结果。

Linux:如何使用图形化工具远程管理 Linux 上的 MySQL
Linux:如何使用图形化工具远程管理 Linux 上的 MySQL

此外,性能统计数据和报表仅用于MySQL5.6以上的版本。对于5.5及其以下的版本,性能部分会以灰色显示。

结论

简介且直观的选项卡界面,丰富的特性,开源,使MySQL Workbench成为一个非常好的可视化数据库设计和管理工具。为其减分的是它的性能。我注意到在一台运行繁忙的服务器上,Workbench有时会变得异常缓慢,尽管它的性能差强人意,我依然认为MySQL Workbench是MySQL数据库管理员和设计人员必备的工具之一。

你曾在你的生产环境中用过Workbench吗?或者你还有别的GUI工具可以推荐?请分享你的经验吧。


via: http://xmodulo.com/remote-mysql-databases-gui-tool.html

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

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

来源:https://linux.cn/article-5569-1.html

Linux:Linux有问必答:如何在虚拟机上配置PCI直通

提问:我想要分配一块物理网卡到用KVM创建的虚拟机上。我打算为这台虚拟机启用网卡的PCI直通。请问,我如何才能在virt-manager里面通过PCI直通方式来增加一个PCI设备到虚拟机上?

如今的hypervisor能够高效地在多个虚拟操作系统间共享和模拟硬件资源。然而,虚拟资源共享不是总能使人满意,甚至在虚拟机性能是重点考量时,或者是虚拟机需要硬件DMA的完全控制时,应该避免共享。一项名叫“PCI直通”的技术可以用在一个虚拟机需要独享PCI设备时(例如:网卡、声卡、显卡)。本质上,PCI直通穿透了虚拟层,直接将PCI设备放到虚拟机里,而其他虚拟机则不能访问该设备。

开启“PCI直通”的准备

如果你想要为一台HVM实例开启PCI直通(例如,一台KVM创建的全虚拟化的虚拟机),你的母系统(包括CPU和主板)必须满足以下条件。如果你的虚拟机是半虚拟化的(由Xen创建),你可以跳过这步。

为了在 HVM虚拟机上开启PCI直通,系统需要支持VT-d (Intel处理器)或者AMD-Vi (AMD处理器)。Intel的VT-D(“英特尔直接I/O虚拟化技术”)是适用于最高端的Nehalem处理器和它的后继者(例如,Westmere、Sandy Bridge的,Ivy Bridge)。注意:VT-d和VT-x是两个独立功能。intel/AMD处理器支持VT-D/AMD-VI功能的列表可以查看这里

在确认你的设备支持VT-d/AMD-Vi后,还有两件事情需要做。首先,确保VT-d/AMD-Vi已经在BIOS中开启。然后,在内核启动过程中开启IOMMU。IOMMU服务,是由VT-d/AMD-Vi提供的,可以保护虚拟机访问的主机内存,同时它也是全虚拟化虚拟机支持PCI直通的前提。

Intel处理器中,通过将“intel_iommu=on传给内核启动参数来开启IOMMU。参看这篇教程了解如何通过GRUB修改内核启动参数。

配置完启动参数后,重启电脑。

添加PCI设备到虚拟机

我们已经完成了开启PCI直通的准备。事实上,只需通过virt-manager就可以给虚拟机分配一个PCI设备。

打开virt-manager的虚拟机设置,在左边工具栏点击‘增加硬件’按钮。

选择从PCI设备表一个PCI设备来分配,点击“完成”按钮

Linux:Linux有问必答:如何在虚拟机上配置PCI直通
Linux:Linux有问必答:如何在虚拟机上配置PCI直通

最后,启动实例。这样,主机的PCI设备已经可以由虚拟机直接访问了。

常见问题

在虚拟机启动时,如果你看见下列任何一个错误,这个错误有可能由于母机VT-d (或 IOMMU)未开启导致。

Error starting domain: unsupported configuration: host doesn't support passthrough of host PCI devices

Error starting domain: Unable to read from monitor: Connection reset by peer

请确保”intel_iommu=on“启动参数已经按上文叙述开启。


via: http://ask.xmodulo.com/pci-passthrough-virt-manager.html

作者:Dan Nanni 译者:Vic020/VicYu 校对:wxy

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

来源:https://linux.cn/article-5570-1.html

Linux:安装完Ubuntu 15.04桌面后要做的15件事

本教程适用于在自己的电脑上安装了 Ubuntu 15.04 “Vivid Vervet” 桌面的新手,这里会告诉你安装之后应该做哪些事情,来自定义你的系统和安装一些基本程序作为日常使用。

Linux:安装完Ubuntu 15.04桌面后要做的15件事
Linux:安装完Ubuntu 15.04桌面后要做的15件事

安装完Ubuntu 15.04桌面后要做的15件事

1. 启用Ubuntu额外软件库并更新系统

在刚装好Ubuntu之后你应该要关心的第一件事是启用Canonical的官方合作伙伴提供的Ubuntu额外软件库,并且通过最近一次的安全补丁和软件更新来保持系统是最新状态。

要完成这一步,依次从左边菜单中打开System Settings -> Software and Updates工具,并检查所有Ubuntu软件和其他软件库(Canonical 的合作伙伴所提供),点击关闭按钮并等待重新加载缓存源树。

Linux:安装完Ubuntu 15.04桌面后要做的15件事
Linux:安装完Ubuntu 15.04桌面后要做的15件事

软件更新

Linux:安装完Ubuntu 15.04桌面后要做的15件事
Linux:安装完Ubuntu 15.04桌面后要做的15件事

其它软件(Canonical 合作伙伴)

为了快速而顺畅的更新,打开终端并输入以下命令来让系统使用新软件库:

$ sudo apt-get update
$ sudo apt-get upgrade
Linux:安装完Ubuntu 15.04桌面后要做的15件事
Linux:安装完Ubuntu 15.04桌面后要做的15件事

Ubuntu 升级

2. 安装额外驱动

为了能让系统扫描并安装额外的硬件专有驱动,我们依然从System Settings打开Software and Updates工具,选择Additional Drivers标签并等待该工具扫描驱动。

如果有驱动匹配到了你的硬件,查看你想要安装的驱动并点击Apply按钮来安装它。如果专有驱动没有如预期的工作,用Revert按钮就能卸载它们或勾选Do not use the device后点击Apply按钮。

Linux:安装完Ubuntu 15.04桌面后要做的15件事
Linux:安装完Ubuntu 15.04桌面后要做的15件事

安装驱动

3. 安装Synaptic和Gdebi工具

除了Ubuntu Software Center之外,Synaptic也是一个apt的图形化工具,通过它你能管理、安装、卸载、搜索和升级软件库并配置软件包。同样的,Gdebi对本地的.deb 包也有类似功能。在终端上输入以下命令来安装这两个包:

$ sudo apt-get install synaptic gdebi
Linux:安装完Ubuntu 15.04桌面后要做的15件事
Linux:安装完Ubuntu 15.04桌面后要做的15件事

安装 Synaptic 和 Gdebi

Linux:安装完Ubuntu 15.04桌面后要做的15件事
Linux:安装完Ubuntu 15.04桌面后要做的15件事

Synaptic 包管理器

4. 更改系统外观和行为

如果你想要更改桌面背景或图标大小,依次打开System Settings –> Appearance –> Look,并对桌面进行个性化设置。要把菜单移动到窗口标题栏,在Behavior标签中设置即可。

Linux:安装完Ubuntu 15.04桌面后要做的15件事
Linux:安装完Ubuntu 15.04桌面后要做的15件事

系统外观

5. 提升系统安全性和隐私性

Linux:安装完Ubuntu 15.04桌面后要做的15件事
Linux:安装完Ubuntu 15.04桌面后要做的15件事

增强系统安全

Linux:安装完Ubuntu 15.04桌面后要做的15件事
Linux:安装完Ubuntu 15.04桌面后要做的15件事

系统安全选项

来源:https://linux.cn/article-5573-1.html

Linux:如何在一个Docker容器里安装Discourse

大家好,今天我们将会学习如何利用Docker平台安装Discourse。Discourse是一个完全开源的讨论平台,以未来十年的互联网理念设计,拥有一个邮件列表,一个论坛和一个长篇聊天室。不管从技术角度还是社会学角度,如今要体验一个现代的、勃勃生机的、完全开源的互联网讨论平台,Discourse都是一个不错的途径。Discourse是一个简单、简明、简易的讨论方式。它确实是一个令人称赞的平台,对于互联网上各种各样的论坛来说,提供了一个上手可用的很酷的服务。

Docker是一个开源的、可以将任何应用以轻量级容器的方式打包、传输和运行的开放平台。Docker容器技术使得可以更加方便和容易构建Discourse。

所以,下面是一些快速且容易的步骤,用来在一个Docker环境里面安装Discourse。

1. 安装Docker

首先,我们需要确认我们的主机操作系统已经安装了Docker。我们需要在shell或者终端运行以下命令安装Docker。

在Ubuntu上

docker安装包在Ubuntu的仓库里面是可用的,所以我们将会使用apt管理器安装,以sudo或者root模式

# apt-get docker

在CentOS 7上

在CentOS 7的主机上,我们使用yum管理器安装docker,因为CentOS的仓库里同样有docker安装包

# yum install docker
Linux:如何在一个Docker容器里安装Discourse
Linux:如何在一个Docker容器里安装Discourse

2. 设定交换内存

如果你的RAM容量小于1GB,那么确保升级你的系统达到1GB或者以上,Discourse不能在512MB的RAM下安装。如果你现在准备好了安装Discourse,根据下面的步骤为你的VPS(Virtual Private Servers)或者服务器设定交换内存:

运行下面的命令,创建一个空的交换文件。

# install -o root -g root -m 0600 /dev/null /swapfile

如果你想你的交换内存达到1GB,那么执行下面的步骤,并且跳过接下来的第二步。

# dd if=/dev/zero of=/swapfile bs=1k count=1024k

如果你想达到2GB,跳过上一步,跟着下面做

# dd if=/dev/zero of=/swapfile bs=1k count=2014k

接着,我们指定交换内存为swapfile

# mkswap /swapfile

运行下面的命令激活交换内存

# swapon /swapfile

现在,我们将其添加到文件系统分区表里,这样重启之后就自动挂载了。

# echo "/swapfile swap swap auto 0 0" | sudo tee -a /etc/fstab

设置swappiness参数为10,这样交换内存仅作为一个紧急缓冲区用。

# sudo sysctl -w vm.swappiness=10
# echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf

3. 安装Discourse

在我们的主机上安装好Docker后,我们将会安装Discourse。现在,我们从官方的Discourse GitHub仓库克隆一份到/var/discourse目录下。我们需要运行下面的命令完成这一步。

# mkdir /var/discourse/
# cd /var/discourse/
# git clone https://github.com/discourse/discourse_docker.git /var/discourse/

克隆好仓库后,我们给discourse服务器复制配置文件

# cp samples/standalone.yml containers/app.yml
Linux:如何在一个Docker容器里安装Discourse
Linux:如何在一个Docker容器里安装Discourse

4. 配置Discourse

接下来,我们用自己喜欢的文本编辑器,编辑容器目录下的discourse配置文件app.yml

# nano containers/app.yml

现在,我们需要将开发者邮箱地址DISCOURSEDEVELOPEREMAILS修改为自己的,如下。

DISCOURSE_DEVELOPER_EMAILS: 'arun@linoxide.com'

然后,我们设置主机名为服务器的域名。

DISCOURSE_HOSTNAME: 'discourse.linoxide.com'

接着,设置放在相同的discourse主机或vps上的SMTP服务器的认证信息。这些SMTP设置用于你的Discourse发送邮件。

DISCOURSE_SMTP_ADDRESS: smtp.linoxide.com
DISCOURSE_SMTP_PORT: 587 # (可选)
DISCOURSE_SMTP_USER_NAME: admin@linoxide.com # (可选)
DISCOURSE_SMTP_PASSWORD: test123 # (可选)
Linux:如何在一个Docker容器里安装Discourse
Linux:如何在一个Docker容器里安装Discourse

如果你在使用一个1GB的Discourse,设定UNICORNWORKERS为2,dbshared_buffers为128MB,这样你会有更多的内存空间。

运行Discourse需要强制性地创建一个邮件服务器。如果你已经有一个服务器了那就好办多了,我们可以使用它的认证信息。如果你没有现成的邮件服务器,或者你不知道那是什么。没关系,可以在Mandrill (或MailgunMailjet)创建一个免费的帐号,然后使用其提供的认证信息。

5. 启动Discourse应用

配置完discourse的配置文件后,我们当然是想启动Discourse服务器。首先,在/var/discourse/目录下运行下面的命令,加载discourse引导程序。

# ./launcher bootstrap app
Linux:如何在一个Docker容器里安装Discourse
Linux:如何在一个Docker容器里安装Discourse

上述命令可能会花去几分钟时间,会自动配置我们的Discourse环境。然后,该进程完成后,我们需要运行下面的命令启动Discourse App

# ./launcher start app

Starting Discourse

如果一切都正常,我们就能使用惯用的浏览器来访问我们新鲜出炉的 Discourse 的 Web 界面了: http://ip-address/ 或 http://discourse.linoxide.com/ 。然后,我们就可以创建一个新账号并成为管理员。

Linux:如何在一个Docker容器里安装Discourse
Linux:如何在一个Docker容器里安装Discourse

维护

这里往下是/var/discourse/目录里的 launcher 命令的用法,它可以用于我们在Docker 容器里面控制和维护Disourse。

用法: launcher 命令 配置 [--skip-prereqs]
命令:
start: 启动/初始化一个容器
stop: 停止一个运行的容器
restart: 重启一个容器
destroy:停止并删除一个容器
enter: 使用 nsenter 进入容器
ssh: 在一个运行的容器中启动一个 bash shell
logs: 容器的 Docker l日志
mailtest: 在容器中测试邮件设置
bootstrap: 基于配置模版来引导一个容器
rebuild: 重建一个容器(摧毁旧的,初始化,启动新的)
cleanup: 清理所有停止了24小时以上的容器
选项:
--skip-prereqs 不检查前置需求
--docker-args 当运行 docker 时,展开并传入参数

总结

哈哈!我们已经成功使用Docker技术安装了Discourse。Docker技术使得Discourse十分容易安装在任何平台,并且包含所有的要求。我们需要自己的邮件服务器或者邮件服务器的证书来启动它。对于便捷的现代邮件列表,论坛来说,Discourse是一个伟大的平台。(最后这句有些别扭)


via: http://linoxide.com/how-tos/install-discourse-docker-container/

作者:Arun Pyasi 译者:wi-cuckoo 校对:wxy

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

来源:https://linux.cn/article-5574-1.html

Linux:如何在 Ubuntu 中更改默认浏览器和 Email 客户端

Ubuntu 自带了一些已经预装的默认应用程序,包括非常流行的 Mozilla 火狐浏览器和 Thunderbird 的 e-mail 客户端。

Linux:如何在 Ubuntu 中更改默认浏览器和 Email 客户端
Linux:如何在 Ubuntu 中更改默认浏览器和 Email 客户端

尽管这两个应用都有它们自己的粉丝,但是没有一个应用能符合每个人的口味和需要。我们经常收到邮件或者推文,询问我们可以怎样在 Ubuntu 上更改默认浏览器或者设置处理邮件链接为不同的电子邮件客户端等。

我们在这里不仅讨论如何安装不同的软件,还包括如何给一个特定的文件,链接或者内容类型设置其系统处理应用。

在 Ubuntu 中更改默认应用程序,包括浏览器、电子邮件客户端、文本编辑器、音乐和视频播放器都非常的简单。但并不是每个人都知道更改这些的设置面板在哪里,让我们来快速看一下吧。

如何在 Ubuntu 上更改默认浏览器

Mozilla 火狐浏览器是一扇稳定、开源而且可靠的互联网之窗,但它并不是每个人的选择。这都没关系。

要在 Ubuntu 上使用不同的默认浏览器,首先,显而易见,你需要安装一个新的浏览器。你该怎么做取决于你想要的浏览器:

不管你选择哪个浏览器,不管你选择怎样安装,完成之后你就可以继续了。

要更改在点击其它应用(如即时通讯软件、Twitter 客户端、 e-mail 中)中的链接时打开的默认网页浏览器,你需要用到 Ubuntu 系统设置工具。

Linux:如何在 Ubuntu 中更改默认浏览器和 Email 客户端
Linux:如何在 Ubuntu 中更改默认浏览器和 Email 客户端

你可以用多种方法打开系统设置。其中一种最快的方式是点击右上角(RTL系统是左上角)的 Cog 图标并选择‘系统设置’菜单快捷方式。

  1. 打开‘系统设置’
  2. 选择‘详细’选项
  3. 在侧边栏选择‘默认应用程序’
  4. 把 ‘Web’ 条目的 ‘火狐’ 改为你想要的选项
Linux:如何在 Ubuntu 中更改默认浏览器和 Email 客户端
Linux:如何在 Ubuntu 中更改默认浏览器和 Email 客户端

就是这样。

如何在 Ubuntu 上更改默认的邮件客户端

Ubuntu 用 Thunderbird 作为默认的邮件应用程序。这意味着当你点击大部分浏览器、 PDF文件、及时通讯软件等上的 电子邮件地址或者一个 mailto 链接 的时候会自动打开 这个应用。

当然,如果你使用 Thunderbird,这真的很方便。但是我们很多人并非如此; 我们可能使用像 Geary 这样的轻量级客户端,GNOME stalwart Evolution,或者依靠像 Gmail 或者 Outlook 这样的网络邮件服务。

在 Ubuntu 上从 Thunderbird 更改默认邮件客户端 到另一个应用程序,打开系统设置 > 详细 > 默认应用程序。点击下拉菜单到 ‘Mail’ 并选择从列表中选择你喜欢的客户端。

在 Ubuntu 上设置 Gmail 为默认的邮件客户端,你首先需要点击下面的按钮安装 ‘gnome-gmail’ 软件包。安装完后打开系统设置 > 详细 > 默认应用程序。然后点击‘Mail’ 的下拉菜单,并选择从列表中选择 ‘Gmail’。

Linux:如何在 Ubuntu 中更改默认浏览器和 Email 客户端
Linux:如何在 Ubuntu 中更改默认浏览器和 Email 客户端

更多

上述同样的步骤也可以用来设置你双击音乐文件时打开你喜欢的音乐播放器,用比如 VLC 应用程序处理 .avi 和 .mp4 文件,等等。


via: http://www.omgubuntu.co.uk/2015/04/change-your-default-web-browser-in-ubuntu

作者:Joey-Elijah Sneddon 译者:ictlyh 校对:wxy

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

来源:https://linux.cn/article-5582-1.html

Linux:iptraf:TCP/UDP网络监控工具

iptraf是一个基于ncurses开发的IP局域网监控工具,它可以生成各种网络统计数据,包括TCP信息、UDP统计、ICMP和OSPF信息、以太网负载信息、节点统计、IP校验和错误和其它一些信息。

它基于ncurses的用户界面也会把使用者从命令行选项的梦靥中拯救出来。

功能

  • 一个用于显示通过网络的IP流量信息的IP流量监控器,包括TCP标识信息、包和字节统计、ICMP详情、OSPF包类型
  • 显示IP、TCP、UDP、ICMP、非IP和其它IP包计数、IP校验和错误、接口活动、包大小计数的综合详细的接口统计数据
  • 一个用于计数常用TCP和UDP应用端口的流入和流出包的TCP和UDP服务监控器
  • 一个用于发现活动主机和显示这些活动主机的数据活动的局域网统计模块
  • TCP、UDP和其它协议的显示过滤器,允许你查看你做感兴趣的流量
  • 日志记录
  • 支持以太网、FDDI、ISDN、SLIP、PPP和回环接口类型
  • 利用Linux内核内建的原生套接口界面,可以用于大范围支持的网卡
  • 全屏、菜单驱动操作

要安装

Ubuntu及其衍生版

sudo apt-get install iptraf

Arch Linux及其衍生版

sudo pacman -S iptra

Fedora及其衍生版

sudo yum install iptraf

用法

如果iptraf命令不带任何命令行选项执行,该程序就会以交互模式显现,可以通过主菜单获得各种各样的工具。

Linux:iptraf:TCP/UDP网络监控工具
Linux:iptraf:TCP/UDP网络监控工具

易于导航的菜单。

Linux:iptraf:TCP/UDP网络监控工具
Linux:iptraf:TCP/UDP网络监控工具

选择监控的接口。

Linux:iptraf:TCP/UDP网络监控工具
Linux:iptraf:TCP/UDP网络监控工具

来自ppp0接口的流量

Linux:iptraf:TCP/UDP网络监控工具
Linux:iptraf:TCP/UDP网络监控工具

希望你喜欢。


via: http://www.unixmen.com/iptraf-tcpudp-network-monitoring-utility/

作者:Enock Seth Nyamador 译者:GOLinux 校对:wxy

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

来源:https://linux.cn/article-5577-1.html

Linux:Linux有问必答:Ubuntu桌面上如何禁用默认的密钥环解锁提示

问题:当我启动我的Ubuntu桌面时,出现了一个弹出对话框,要求我输入密码来解锁默认的密钥环。我怎样才能禁用这个“解锁默认密钥环”弹出窗口,并自动解锁我的密钥环?

密钥环是一个以加密方式存储你的登录信息的本地数据库。各种桌面应用(如浏览器、电子邮件客户端)使用密钥环来安全地存储并管理你的登录凭证、机密、密码、证书或密钥。对于那些需要检索存储在密钥环中的信息的应用程序,需要解锁该密钥环。

Ubuntu桌面所使用的GNOME密钥环被整合到了桌面登录中,该密钥环会在你验证进入桌面后自动解锁。但是,如果你设置了自动登录桌面或者是从休眠中唤醒,你默认的密钥环仍然可能“被锁定”的。在这种情况下,你会碰到这一提示:

“输入密码来解锁密钥环‘默认密钥环’。某个应用想要访问密钥环‘默认密钥环’,但它被锁定了。”

如果你想要避免在每次弹出对话框出现时输入密码来解锁默认密钥环,那么你可以这样做。

在做之前,请先了解禁用密码提示后可能出现的结果。通过自动解锁默认密钥环,你可以让任何使用你桌面的人无需知道你的密码而能获取你的密钥环(以及存储在密钥环中的任何信息)。

禁用默认密钥环解锁密码

打开Dash,然后输入“password”来启动“密码和密钥”应用。

Linux:Linux有问必答:Ubuntu桌面上如何禁用默认的密钥环解锁提示
Linux:Linux有问必答:Ubuntu桌面上如何禁用默认的密钥环解锁提示

或者,使用seahorse命令从命令行启动图形界面。

$ seahorse

在左侧面板中,右击“默认密钥环”,并选择“修改密码”。

Linux:Linux有问必答:Ubuntu桌面上如何禁用默认的密钥环解锁提示
Linux:Linux有问必答:Ubuntu桌面上如何禁用默认的密钥环解锁提示

输入你的当前登录密码。

在设置“默认”密钥环新密码的密码框中留空。

Linux:Linux有问必答:Ubuntu桌面上如何禁用默认的密钥环解锁提示
Linux:Linux有问必答:Ubuntu桌面上如何禁用默认的密钥环解锁提示

在询问是否不加密存储密码对话框中点击“继续”。

搞定。从今往后,那个该死的解锁密钥环提示对话框再也不会来烦你了。


via: http://ask.xmodulo.com/disable-entering-password-unlock-default-keyring.html

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

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

来源:https://linux.cn/article-5584-1.html

Linux:如何在CentOS 7.x中安装OpenERP(Odoo)

各位好,这篇教程关于的是如何在CentOS 7中安装Odoo(就是我们所知的OpenERP)。你是不是在考虑为你的业务安装一个不错的ERP(企业资源规划)软件?那么OpenERP就是你寻找的最好的程序,因为它是一款为你的商务提供杰出特性的自由开源软件。

OpenERP是一款自由开源的传统的OpenERP(企业资源规划),它包含了开源CRM、网站构建、电子商务、项目管理、计费账务、POS、人力资源、市场、生产、采购管理以及其它模块用于提高效率及销售。Odoo中的应用可以作为独立程序使用,它们也可以无缝集成到一起,因此你可以在安装几个程序来得到一个全功能的开源ERP。

因此,下面是在你的CentOS上安装OpenERP的步骤。

1. 安装 PostgreSQL

首先,首先我们需要更新CentOS 7的软件包来确保是最新的包,补丁和安全更新。要更新我们的系统,我们要在shell下运行下面的命令。

# yum clean all
# yum update

现在我们要安装PostgreSQL,因为OpenERP使用PostgreSQL作为它的数据库。要安装它,我们需要运行下面的命令。

# yum install postgresql postgresql-server postgresql-libs

Installing postgresql

安装完成后,我们需要用下面的命令初始化数据库。

# postgresql-setup initdb

Intializating postgresql

我们接着设置PostgreSQL来使它每次开机启动。

# systemctl enable postgresql
# systemctl start postgresql

因为我们还没有为用户“postgresql”设置密码,我们现在设置。

# su - postgres
$ psql
postgres=# \password postgres
postgres=# \q
# exit

setting password postgres

2. 设置Odoo仓库

在初始化数据库初始化完成后,我们要添加 EPEL(企业版Linux的额外包)到我们的CentOS中。Odoo(或者OpenERP)依赖的Python运行时环境以及其他包没有包含在标准仓库中。这样我们要为企业版Linux添加额外的包仓库支持来解决Odoo所需要的依赖。要安装完成,我们需要运行下面的命令。

# yum install epel-release

Installing EPEL Release

现在,安装EPEL后,我们现在使用yum-config-manager添加Odoo(OpenERP)的仓库。

# yum install yum-utils
# yum-config-manager --add-repo=https://nightly.odoo.com/8.0/nightly/rpm/odoo.repo

Adding OpenERP (Odoo) Repo

3. 安装Odoo 8 (OpenERP)

在CentOS 7中添加Odoo 8(OpenERP)的仓库后。我们使用下面的命令来安装Odoo 8(OpenERP)。

# yum install -y odoo

上面的命令会安装odoo以及必须的依赖的包。

Installing odoo or OpenERP

现在我们使用下面的命令在每次启动后启动Odoo服务。

# systemctl enable odoo
# systemctl start odoo

Starting Odoo

4. 打开防火墙

因为Odoo使用8069端口,我们需要在防火墙中允许远程访问。我们使用下面的命令来在防火墙中允许8069端口访问。

# firewall-cmd --zone=public --add-port=8069/tcp --permanent
# firewall-cmd --reload

Allowing firewall Port

注意:默认情况下只有本地才允许连接数据库。如果我们要允许PostgreSQL的远程访问,我们需要在pg_hba.conf添加下面图片中一行

# nano /var/lib/pgsql/data/pg_hba.conf

Allowing Remote Access pgsql

5. Web接口

我们已经在CentOS 7中安装了最新的Odoo 8(OpenERP),我们可以在浏览器中输入http://ip-address:8069来访问Odoo。 接着,我们要做的第一件事就是创建一个新的数据库和新的密码。注意,主密码默认是‘admin’。接着,我们可以在面板中输入用户名和密码。

Odoo Panel

总结

Odoo 8(OpenERP)是世界上最好的开源ERP程序。OpenERP是由许多模块组成的针对商务和公司的完整ERP程序,我们已经把它安装好了。因此,如果你有任何问题、建议、反馈请在下面的评论栏写下。谢谢你!享受OpenERP(Odoo 8)吧 :-)


via: http://linoxide.com/linux-how-to/setup-openerp-odoo-centos-7/

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

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

来源:https://linux.cn/article-5583-1.html

Linux:Linux有问必答:Linux上如何查看种子文件的内容

问题: 我从网站上下载了一个torrent(种子)文件。Linux上有没有工具让我查看torrent文件的内容?例如,我想知道torrent里面都包含什么文件。

torrent文件(也就是扩展名为.torrent的文件)是BitTorrent元数据文件,里面存储了BitTorrent客户端用来从BitTorrent点对点网络下载共享文件的信息(如,追踪器URL、文件列表、大小、校验和、创建日期等)。在单个torrent文件里面,可以列出一个或多个文件用于共享。

Linux:Linux有问必答:Linux上如何查看种子文件的内容
Linux:Linux有问必答:Linux上如何查看种子文件的内容

torrent文件内容由BEncode编码为BitTorrent数据序列化格式,因此,要查看torrent文件的内容,你需要相应的解码器。

事实上,任何图形化的BitTorrent客户端(如Transmission或uTorrent)都带有BEncode解码器,所以,你可以用它们直接打开来查看torrent文件的内容。然而,如果你不想要使用BitTorrent客户端来检查torrent文件,你可以试试这个命令行torrent查看器,它叫dumptorrent

dumptorrent命令可以使用内建的BEncode解码器打印出torrent文件的详细信息(如,文件名、大小、跟踪器URL、创建日期、信息散列等等)。

安装DumpTorrent到Linux

要安装dumptorrent到Linux,你可以从源代码来构建它。

在Debian、Ubuntu或Linux Mint上:

$ sudo apt-get install gcc make
$ wget http://downloads.sourceforge.net/project/dumptorrent/dumptorrent/1.2/dumptorrent-1.2.tar.gz
$ tar -xvf dumptorrent-1.2.tar.gz
$ cd dumptorrent-1.2
$ make
$ sudo cp dumptorrent /usr/local/bin

在CentOS、Fedora或RHEL上:

$ sudo yum install gcc make
$ wget http://downloads.sourceforge.net/project/dumptorrent/dumptorrent/1.2/dumptorrent-1.2.tar.gz
$ tar -xvf dumptorrent-1.2.tar.gz
$ cd dumptorrent-1.2
$ make
$ sudo cp dumptorrent /usr/local/bin

确保你的搜索路径 PATH 中包含了/usr/local/bin。

查看torrent的内容

要检查torrent的内容,只需要运行dumptorrent,并将torrent文件作为参数执行。这会打印出torrent的概要,包括文件名、大小和跟踪器URL。

$ dumptorrent 
Linux:Linux有问必答:Linux上如何查看种子文件的内容
Linux:Linux有问必答:Linux上如何查看种子文件的内容

要查看torrent的完整内容,请添加“-v”选项。它会打印更多关于torrent的详细信息,包括信息散列、片长度、创建日期、创建者,以及完整的声明列表。

$ dumptorrent -v 
Linux:Linux有问必答:Linux上如何查看种子文件的内容
Linux:Linux有问必答:Linux上如何查看种子文件的内容

via: http://ask.xmodulo.com/view-torrent-file-content-linux.html

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

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

来源:https://linux.cn/article-5585-1.html

Linux:20个令人惊叹的桌面Docker容器

大家好,今天我们会列出一些运行在Docker容器中的很棒的桌面软件,我们可以在自己的桌面系统中运行它们。Docker 是一个开源项目,提供了一个可以打包、装载和运行任何应用的轻量级容器的开放平台。它没有语言支持、框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行。它可以使部署和扩展web应用程序、数据库和后端服务像搭积木一样容易,而不依赖特定技术栈或提供商。它主要是由开发、运维工程师使用的,因为它简单、快速和方便,可以用来测试和辅助开发他们产品,但是我们也可以在桌面环境使用Docker,这样一些桌面程序可以开箱即用。

下边是20个非常棒的桌面软件docker镜像,我们可以使用Docker来运行。

Linux:20个令人惊叹的桌面Docker容器
Linux:20个令人惊叹的桌面Docker容器

1. Lynx

Lynx是一个一直以来最受欢迎的文本界面网页浏览器,很多Linux用户都很熟悉它。它应该是现在还在日常和开发环境中被使用的最古老的网页浏览器了。可以使用如下命令运行Lync。

$ docker run -it
--name lynx
jess/lynx

2. Irssi

Irssi是一个非常棒的文本界面IRC客户端。可以使用如下命令运行Irssi。

docker run -it --name my-irssi -e TERM -u $(id -u):$(id -g)
-v $HOME/.irssi:/home/user/.irssi:ro
-v /etc/localtime:/etc/localtime:ro
irssi

3. Chrome

Chrome是一个令人惊叹的图形界面网页浏览器,由Google开发,它基于开源的Chromium项目。Google Chrome是一个被广泛使用的、快速安全的网页浏览器,经常上网的人会非常熟悉它。我们可以使用如下命令在Docker中运行Chrome。

$ docker run -it
--net host
--cpuset 0
--memory 512mb
-v /tmp/.X11-unix:/tmp/.X11-unix
-e DISPLAY=unix$DISPLAY
-v $HOME/Downloads:/root/Downloads
-v $HOME/.config/google-chrome/:/data
-v /dev/snd:/dev/snd --privileged
--name chrome
jess/chrome

4. Tor浏览器

Tor浏览器是一个支持匿名访问的网页浏览器。它让我们可以自由地在网络世界遨游,或者浏览被特定组织或者网络服务提供商封锁的网站。它会阻止别人通过监视我们的网络连接来窃取我们在网络上的一举一动以及我们的确切位置。运行如下命令运行Tor浏览器。

$ docker run -it
-v /tmp/.X11-unix:/tmp/.X11-unix
-e DISPLAY=unix$DISPLAY
-v /dev/snd:/dev/snd --privileged
--name tor-browser
jess/tor-browser

5. Firefox浏览器

Firefox浏览器是一个自由开源的网页浏览器,它由Mozilla基金会开发。它使用Gecko和SpiderMonkey引擎。Firefox浏览器有很多新特性,并且它以性能和安全性著称。

$ docker run -d
--name firefox
-e DISPLAY=$DISPLAY
-v /tmp/.X11-unix:/tmp/.X11-unix
kennethkl/firefox

6. Rainbow Stream

Rainbow Stream是一个文本界面的Twitter客户端,有实时显示tweetstream、搜索、喜欢和更多其他特性,可以直接在终端使用。使用如下命令运行Rainbow Stream。

$ docker run -it
-v /etc/localtime:/etc/localtime
-v $HOME/.rainbow_oauth:/root/.rainbow_oauth
-v $HOME/.rainbow_config.json:/root/.rainbow_config.json
--name rainbowstream
jess/rainbowstream

7. Gparted

Gparted是一个用来给磁盘分区的开源软件。现在可以在Docker容器里享受分区的乐趣了。可以使用如下命令运行gparted。

$ docker run -it
-v /tmp/.X11-unix:/tmp/.X11-unix
-e DISPLAY=unix$DISPLAY
--device /dev/sda:/dev/sda  # 将设备挂载为分区
--name gparted
jess/gparted

8. GIMP图片编辑器

GIMP(Gnu Image Manipulation Program)是一个令人惊叹的Linux图片编辑软件。它是一个可以自由分发的可以处理照片修正、图像合成和图像创作等任务的工具。

$ docker run -it
--rm -e DISPLAY=$DISPLAY
-v /tmp/.X11-unix:/tmp/.X11-unix
jarfil/gimp-git

9. Thunderbird

Thunderbird是一个自由开源的电子邮件软件,它由Mozilla基金会开发和维护。它有众多一个电子邮件软件应该具有的功能。Thunderbird非常易于安装和定制。使用如下命令在Docker中运行Thunderbird。

$ docker run -d
-e DISPLAY
-v /tmp/.X11-unix:/tmp/.X11-unix:ro
-u docker
-v $HOME/docker-data/thunderbird:/home/docker/.thunderbird/
yantis/thunderbird thunderbird

10. Mutt

Mutt是一个文本界面的电子邮件客户端,有很多很酷的功能,如彩色支持,IMAP、POP3、SMTP支持,邮件存储支持等。 使用如下命令运行Mutt。

$ docker run -it
-v /etc/localtime:/etc/localtime
-e GMAIL -e GMAIL_NAME
-e GMAIL_PASS -e GMAIL_FROM
-v $HOME/.gnupg:/home/user/.gnupg
--name mutt
jess/mutt

11. Skype

Skype是一个支持文字、语音和视频的即时通讯软件,它不是开源的,但在Linux下可以运行的很好。我们同样可以在Docker中运行Skype,使用如下命令。

$ docker run -it
-v /tmp/.X11-unix:/tmp/.X11-unix:ro
-v /dev/snd:/dev/snd --privileged
-e DISPLAY="unix$DISPLAY"
tianon/skype

12. Cathode

Cathode是一个漂亮并且高度可定制的终端模拟器,灵感来自古典计算机。使用如下命令运行Cathode。

$ docker run -it
-v /tmp/.X11-unix:/tmp/.X11-unix
-e DISPLAY=unix$DISPLAY
--name cathode
jess/1995

13. LibreOffice

LibreOffice是一个功能强大的办公套件,它是自由开源的,现在由The Document基金会维护。它有干净的界面和强大的功能,让我们释放创造力和提升生产力。LibreOffice将数个应用程序集成在一起,是市面上最强大的自由并且开源的办公套件。

$docker run
-v $HOME/Documents:/home/libreoffice/Documents:rw
-v /tmp/.X11-unix:/tmp/.X11-unix
-e uid=$(id -u) -e gid=$(id -g)
-e DISPLAY=unix$DISPLAY --name libreoffice
chrisdaish/libreoffice

14. Spotify

Spotify可以即时访问数百万的歌曲,从经典老歌到最新单曲。可以使用如下命令在Docker中听我们最喜欢的歌曲。

$ docker run -it
-v /tmp/.X11-unix:/tmp/.X11-unix
-e DISPLAY=unix$DISPLAY
-v /dev/snd:/dev/snd --privileged
--name spotify
jess/spotify

15. Audacity

Audacity是一个自由开源的跨平台软件,用来录制和编辑音频。Audacity可以用来做所有类型音频(例如podcast)的后期处理,如归一化、调整、淡入淡出。使用如下命令来运行Audacity。

$ docker run --rm
-u $(id -u):$(id -g)
-v /tmp/.X11-unix:/tmp/.X11-unix:ro
-v /dev/snd:/dev/snd
-v "$HOME:$HOME"
-w "$HOME"
-e DISPLAY="unix$DISPLAY"
-e HOME
$(find /dev/snd/ -type c | sed 's/^/--device /')
knickers/audacity

16. Eclipse

Eclipse是一个集成开发环境。它包含基本的工作区和用来定制环境的可扩展插件系统。它在Java开发者中很流行。

$ docker run -v ~/workspace/:/home/eclipse/workspace/
-e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:ro
-d leesah/eclipse

17. VLC媒体播放器

VLC是一个自由开源的跨平台多媒体播放器,可以播放本地文件、DVD、CD、VCD和各种流媒体。VLC由VideoLAN组织开发和维护。使用如下命令运行VLC。

$ docker run -v
$HOME/Documents:/home/vlc/Documents:rw
-v /dev/snd:/dev/snd --privileged
-v /tmp/.X11-unix:/tmp/.X11-unix
-e uid=$(id -u) -e gid=$(id -g)
-e DISPLAY=unix$DISPLAY --name vlc
chrisdaish/vlc

18. Vim编辑器

Vim是一个高度可配置的文本界面文字编辑器,为高效的文本编辑而生。它是预装在多数UNIX系统中的vi编辑器的改进版本。

$ docker run -i -t --name my-vim -v ~/:/home/dev/src haron/vim

19. Inkscape

Inkscape是一个自由开源的矢量图形编辑器。它可以创建、编辑矢量图形,如插图、图示、线条艺术、图表、徽标以及更复杂的绘画。Inkscape使用的主要矢量图形格式是SVG 1.1版本。它也可以导入和导出一些其他的格式,但实际编辑使用的还是SVG格式。

$docker build -t rasch/inkscape --rm .
$ docker run --rm -e DISPLAY
-u inkscaper
-v /tmp/.X11-unix:/tmp/.X11-unix
-v $HOME/.Xauthority:/home/inkscaper/.Xauthority
--net=host rasch/inkscape

20. Filezilla

Filezilla是一个免费的FTP解决方案,支持FTP、SFTP、FTPS协议。它的客户端是一个功能强大的文件管理工具。它是一个很棒的高度可靠和易用的开源FTP解决方案。

$ xhost +si:localuser:$(whoami)
$ docker run
-d
-e DISPLAY
-v /tmp/.X11-unix:/tmp/.X11-unix:ro
-u docker
-v /:/host
-v $HOME/docker-data/filezilla:/home/docker/.config/filezilla/
yantis/filezilla filezilla

总结

使用Docker运行桌面软件真的是很棒的体验。Docker是一个快速、简单的开发平台,适合从家里、办公室到生产环境里传送和开发软件的场景。使用Docker运行桌面软件是试用而不将其安装到自己实体机文件系统中的很酷的方法。如果你有任何问题、评论或者反馈,清写在下方的评论框中,让我们知道哪些是需要增加或者改进的。谢谢!享受Docker吧 🙂


via: http://linoxide.com/how-tos/20-docker-containers-desktop-user/

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

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

来源:https://linux.cn/article-5579-1.html

Linux:如何在 Windows 操作系统中运行 Docker 客户端

大家好,今天我们来了解一下 Windows 操作系统中的 Docker 以及在其中安装 Docker Windows 客户端的知识。Docker 引擎使用 Linux 特有的内核特性,因此不能通过 Windows 内核运行,所以,(在 Windows 上)Docker 引擎创建了一个小的虚拟系统运行 Linux 并利用它的资源和内核。这样,Windows Docker 客户端就可以用这个虚拟的 Docker 引擎来构建、运行以及管理 Docker 容器。有个叫 Boot2Docker 的团队开发了一个同名的应用程序,它创建了一个虚拟机来运行基于Tiny Core Linux特制的小型 Linux,来在 Windows 上运行 Docker 容器。它完全运行在内存中,需要大约 27M 内存并能在 5秒 (因人而异) 内启动。因此,在用于 Windows 的 Docker 引擎被开发出来之前,我们在 Windows 机器里只能运行 Linux 容器。

Linux:如何在 Windows 操作系统中运行 Docker 客户端
Linux:如何在 Windows 操作系统中运行 Docker 客户端

下面是安装 Docker 客户端并在上面运行容器的简单步骤。

1. 下载 Boot2Docker

在我们开始安装之前,我们需要 Boot2Docker 的可执行文件。可以从 它的 Github 下载最新版本的 Boot2Docker。在这篇指南中,我们从网站中下载版本 v1.6.1。我们从那网页中用我们喜欢的浏览器或者下载管理器下载了名为 docker-install.exe 的文件。

Linux:如何在 Windows 操作系统中运行 Docker 客户端
Linux:如何在 Windows 操作系统中运行 Docker 客户端

2. 安装 Boot2Docker

现在我们运行安装文件,它会安装 Window Docker 客户端、用于 Windows 的 Git(MSYS-git)、VirtualBox、Boot2Docker Linux ISO 以及 Boot2Docker 管理工具,这些对于开箱即用地运行全功能的 Docker 引擎都至关重要。

Linux:如何在 Windows 操作系统中运行 Docker 客户端
Linux:如何在 Windows 操作系统中运行 Docker 客户端

3. 运行 Boot2Docker

安装完成必要的组件之后,我们从桌面上的“Boot2Docker Start”快捷方式启动 Boot2Docker。它会要求你输入以后用于验证的 SSH 密钥。然后会启动一个配置好的用于管理在虚拟机中运行的 Docker 的 unix shell。

Linux:如何在 Windows 操作系统中运行 Docker 客户端
Linux:如何在 Windows 操作系统中运行 Docker 客户端

为了检查是否正确配置,运行下面的 docker version 命令。

docker version
Linux:如何在 Windows 操作系统中运行 Docker 客户端
Linux:如何在 Windows 操作系统中运行 Docker 客户端

4. 运行 Docker

由于 Boot2Docker Start 自动启动了一个已经正确设置好环境变量的 shell,我们可以马上开始使用 Docker。请注意,如果我们要将 Boot2Docker 作为一个远程 Docker 守护进程,那么不要在 docker 命令之前加 sudo。

现在,让我们来试试 hello-world 例子镜像,它会下载 hello-world 镜像,运行并输出 “Hello from Docker” 信息。

$ docker run hello-world
Linux:如何在 Windows 操作系统中运行 Docker 客户端
Linux:如何在 Windows 操作系统中运行 Docker 客户端

5. 使用命令提示符(CMD) 运行 Docker

现在,如果你想开始用命令提示符使用 Docker,你可以打开命令提示符(CMD.exe)。由于 Boot2Docker 要求 ssh.exe 在 PATH 中,我们需要在命令提示符中输入以下命令使得 %PATH% 环境变量中包括 Git 安装目录下的 bin 文件夹。

set PATH=%PATH%;"c:Program Files (x86)Gitbin"

运行上面的命令之后,我们可以在命令提示符中运行 boot2docker start 启动 Boot2Docker 虚拟机。

boot2docker start
Linux:如何在 Windows 操作系统中运行 Docker 客户端
Linux:如何在 Windows 操作系统中运行 Docker 客户端

注意: 如果你看到 machine does no exist 的错误信息,就运行 boot2docker init 命令。

然后复制上图中控制台标出命令到 cmd.exe 中为控制台窗口设置环境变量,然后我们就可以像平常一样运行 docker 容器了。

6. 使用 PowerShell 运行 Docker

为了能在 PowerShell 中运行 Docker,我们需要启动一个 PowerShell 窗口并添加 ssh.exe 到 PATH 变量。

$Env:Path = "${Env:Path};c:Program Files (x86)Gitbin"

运行完上面的命令,我们还需要运行

boot2docker start
Linux:如何在 Windows 操作系统中运行 Docker 客户端
Linux:如何在 Windows 操作系统中运行 Docker 客户端

这会打印用于设置环境变量连接到虚拟机内部运行的 Docker 的 PowerShell 命令。我们只需要在 PowerShell 中运行这些命令就可以和平常一样运行 docker 容器。

7. 用 PUTTY 登录

Boot2Docker 会在%USERPROFILE%.ssh 目录生成和使用用于登录的公共和私有密钥,我们也需要使用这个文件夹中的私有密钥。私有密钥需要转换为 PuTTY 的格式。我们可以通过 puttygen.exe 实现。

我们需要打开 puttygen.exe 并从 %USERPROFILE%.sshid_boot2docker 中导入(“File”->”Load” 菜单)私钥,然后点击 “Save Private Key”。然后用保存的文件通过 PuTTY 用 docker@127.0.0.1:2022 登录。

8. Boot2Docker 选项

Boot2Docker 管理工具提供了一些命令,如下所示。

$ boot2docker
Usage: boot2docker.exe [] {help|init|up|ssh|save|down|poweroff|reset|restart|config|status|info|ip|shellinit|delete|download|upgrade|version} []

总结

通过 Docker Windows 客户端使用 Docker 很有趣。Boot2Docker 管理工具是一个能使任何 Docker 容器能像在 Linux 主机上平滑运行的很棒的应用程序。如果你更仔细的话,你会发现 boot2docker 默认用户的用户名是 docker,密码是 tcuser。最新版本的 boot2docker 设置了一个 host-only 的网络适配器提供访问容器的端口。一般来说是 192.168.59.103,但可以通过 VirtualBox 的 DHCP 实现改变。

如果你有任何问题、建议、反馈,请在下面的评论框中写下来然后我们可以改进或者更新我们的内容。非常感谢!Enjoy:-)


via: http://linoxide.com/linux-how-to/run-docker-client-inside-windows-os/

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

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

来源:https://linux.cn/article-5586-1.html

Linux:Linux网络统计工具/命令

我在Linux(基于CentOS 或者 Debian 的发行版)中该如何查看当前网络端口吞吐量的统计信息?在Linux操作系统中如何查看当前内核snmp计数器以及网络端口的统计信息?

Linux:Linux网络统计工具/命令
Linux:Linux网络统计工具/命令

你可以使用以下任何一个命令:

nstat 命令 : 网络统计工具

键入以下命令:

# nstat

输出样例:

#kernel
IpInReceives                    133243             0.0
IpInDelivers                    133243             0.0
IpOutRequests                   92904              0.0
IcmpOutErrors                   97                 0.0
IcmpOutTimeExcds                97                 0.0
IcmpMsgOutType3                 97                 0.0
TcpActiveOpens                  538                0.0
TcpEstabResets                  56                 0.0
TcpInSegs                       129837             0.0
TcpOutSegs                      89720              0.0
TcpRetransSegs                  42                 0.0
TcpOutRsts                      704                0.0
UdpInDatagrams                  3255               0.0
UdpNoPorts                      97                 0.0
UdpOutDatagrams                 3270               0.0
Ip6OutNoRoutes                  206                0.0
TcpExtTW                        141                0.0
TcpExtDelayedACKs               508                0.0
TcpExtDelayedACKLocked          1                  0.0
TcpExtDelayedACKLost            42                 0.0
TcpExtTCPHPHits                 117659             0.0
TcpExtTCPPureAcks               2158               0.0
TcpExtTCPHPAcks                 605                0.0
TcpExtTCPSackRecovery           1                  0.0
TcpExtTCPLossUndo               16                 0.0
TcpExtTCPSackFailures           4                  0.0
TcpExtTCPFastRetrans            1                  0.0
TcpExtTCPSlowStartRetrans       3                  0.0
TcpExtTCPTimeouts               33                 0.0
TcpExtTCPDSACKOldSent           40                 0.0
TcpExtTCPDSACKRecv              5                  0.0
TcpExtTCPAbortOnData            120                0.0
TcpExtTCPAbortOnClose           55                 0.0
TcpExtTCPSackShiftFallback      9                  0.0
IpExtInOctets                   180131682          0.0
IpExtOutOctets                  7289106            0.0

ss 命令 : 查询套接字工具

要查看统计汇总, 输入:

# ss -s

输出样例:

Total: 786 (kernel 804)
TCP:   65 (estab 40, closed 7, orphaned 0, synrecv 0, timewait 6/0), ports 56
Transport Total     IP        IPv6
*     804       -         -
RAW   1         1         0
UDP   12        9         3
TCP   58        52        6
INET      71        62        9
FRAG      0         0         0

查看ss 命令教程 获取更多信息。

netstat 命令 : 不错的显示套接字信息的旧工具

查看所有网络端口以及汇总信息表,输入:

# netstat -i

输出样例:

Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0    941022      0      0 0        688165      0      0      0 BMRU
lo        16436 0      9304      0      0 0          9304      0      0      0 LRU
ppp0       1496 0      3784      0      0 0          4177      0      0      0 MOPRU

查看每个协议的汇总统计信息,输入:

# netstat -s

输出样例:

Ip:
    1092065 total packets received
    0 forwarded
    0 incoming packets discarded
    1091681 incoming packets delivered
    798913 requests sent out
    895 dropped because of missing route
    759 reassemblies required
    375 packets reassembled ok
Icmp:
    17 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        timeout in transit: 8
        echo replies: 9
    1747 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 1730
        echo request: 17
IcmpMsg:
        InType0: 9
        InType11: 8
        OutType3: 1730
        OutType8: 17
Tcp:
    4822 active connections openings
    1129 passive connection openings
    457 failed connection attempts
    165 connection resets received
    7 connections established
    1062519 segments received
    771394 segments send out
    7158 segments retransmited
    6 bad segments received.
    2578 resets sent
Udp:
    20846 packets received
    1730 packets to unknown port received.
    0 packet receive errors
    19242 packets sent
UdpLite:
TcpExt:
    71 invalid SYN cookies received
    8 resets received for embryonic SYN_RECV sockets
    142 packets pruned from receive queue because of socket buffer overrun
    2109 TCP sockets finished time wait in fast timer
    84 packets rejects in established connections because of timestamp
    19454 delayed acks sent
    6 delayed acks further delayed because of locked socket
    Quick ack mode was activated 7306 times
    1 packets directly queued to recvmsg prequeue.
    1 bytes directly received in process context from prequeue
    823921 packet headers predicted
    24412 acknowledgments not containing data payload received
    10150 predicted acknowledgments
    242 times recovered from packet loss by selective acknowledgements
    33 congestion windows recovered without slow start by DSACK
    335 congestion windows recovered without slow start after partial ack
    336 TCP data loss events
    TCPLostRetransmit: 35
    1 timeouts after reno fast retransmit
    156 timeouts after SACK recovery
    116 timeouts in loss state
    461 fast retransmits
    5 forward retransmits
    608 retransmits in slow start
    2073 other TCP timeouts
    62 SACK retransmits failed
    43074 packets collapsed in receive queue due to low socket buffer
    8499 DSACKs sent for old packets
    101 DSACKs sent for out of order packets
    308 DSACKs received
    9 DSACKs for out of order packets received
    427 connections reset due to unexpected data
    122 connections reset due to early user close
    28 connections aborted due to timeout
    TCPDSACKIgnoredOld: 3
    TCPDSACKIgnoredNoUndo: 60
    TCPSpuriousRTOs: 4
    TCPSackShifted: 282
    TCPSackMerged: 740
    TCPSackShiftFallback: 1017
IpExt:
    InMcastPkts: 47
    OutMcastPkts: 51
    InBcastPkts: 1
    InOctets: 1341508973
    OutOctets: 72525352
    InMcastOctets: 8649
    OutMcastOctets: 7519
    InBcastOctets: 328

查看 netstat 命令教程 获取更多信息。

ip / ifconfig 命令 : 配置或者显示网络端口信息

键入以下命令:

# ifconfig

或者

# /sbin/ifconfig

或者

# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr b8:ac:6f:65:31:e5
          inet addr:192.168.1.5  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::baac:6fff:fe65:31e5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:966334 errors:0 dropped:0 overruns:0 frame:0
          TX packets:703297 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1186255648 (1.1 GiB)  TX bytes:73968238 (70.5 MiB)
          Interrupt:17
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:9666 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9666 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1399578 (1.3 MiB)  TX bytes:1399578 (1.3 MiB)
ppp0      Link encap:Point-to-Point Protocol
          inet addr:10.1.11.70  P-t-P:10.0.31.18  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1496  Metric:1
          RX packets:3784 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4177 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:2400265 (2.2 MiB)  TX bytes:275983 (269.5 KiB)

显示网络端口统计信息,输入:

# ip -s link

输出样例:

1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast
    1444187    9960     0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    1444187    9960     0       0       0       0
2: eth0:  mtu 1500 qdisc mq state UP qlen 1000
    link/ether b8:ac:6f:65:31:e5 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    1221956483 991501   0       0       0       24
    TX: bytes  packets  errors  dropped carrier collsns
    75623937   720272   0       0       0       0
3: wlan0:  mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:21:6a:ca:9b:10 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    0          0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0
4: pan0:  mtu 1500 qdisc noop state DOWN
    link/ether 4a:c7:5f:0e:8e:d8 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    0          0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0
8: ppp0:  mtu 1496 qdisc pfifo_fast state UNKNOWN qlen 3
    link/ppp
    RX: bytes  packets  errors  dropped overrun mcast
    2419881    3848     0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    284151     4287     0       0       0       0

sar 命令: 显示网络统计信息

输入以下命令 (你需要 通过sysstat包安装并启用sar):

sar -n DEV
Linux 2.6.32-220.2.1.el6.x86_64 (www.cyberciti.biz)    Tuesday 13 March 2012   _x86_64_        (2 CPU)
12:00:01  CDT     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
12:10:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:10:01  CDT      eth0    127.13    121.32     95.45     18.34      0.00      0.00      0.00
12:10:01  CDT      eth1     98.48    110.62     16.72     96.33      0.00      0.00      0.00
12:20:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:20:01  CDT      eth0    139.95    133.41    106.30     19.95      0.00      0.00      0.00
12:20:01  CDT      eth1    110.65    121.85     18.14    107.13      0.00      0.00      0.00
12:30:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:30:01  CDT      eth0    147.85    132.49    115.78     20.45      0.00      0.00      0.00
12:30:01  CDT      eth1    111.88    127.39     18.61    117.65      0.00      0.00      0.00
12:40:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:40:01  CDT      eth0    136.75    124.64    105.24     19.48      0.00      0.00      0.00
12:40:01  CDT      eth1    101.65    115.32     17.58    104.50      0.00      0.00      0.00
12:50:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:50:01  CDT      eth0    131.45    125.69     96.49     19.58      0.00      0.00      0.00
12:50:01  CDT      eth1    101.41    111.31     17.54     96.78      0.00      0.00      0.00
01:00:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:00:01  CDT      eth0    140.30    133.27    102.17     20.75      0.00      0.00      0.00
01:00:01  CDT      eth1    106.90    119.51     18.53    103.09      0.00      0.00      0.00
01:10:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:10:01  CDT      eth0    152.03    127.74    125.56     19.85      0.00      0.00      0.00
01:10:01  CDT      eth1    115.60    134.57     18.73    126.96      0.00      0.00      0.00
01:20:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:20:01  CDT      eth0    138.55    130.55    103.03     20.20      0.00      0.00      0.00
....
..
....
..
.
01:00:01  CDT      eth1    156.82    169.48     28.83    138.49      0.00      0.00      0.00
01:10:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:10:01  CDT      eth0    215.19    194.82    163.11     30.99      0.00      0.00      0.00
01:10:01  CDT      eth1    162.49    183.79     28.36    163.70      0.00      0.00      0.00
01:20:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:20:01  CDT      eth0    200.20    192.23    140.64     30.93      0.00      0.00      0.00
01:20:01  CDT      eth1    153.60    166.96     27.32    140.26      0.00      0.00      0.00
01:30:01  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:30:01  CDT      eth0    111.98    103.58     79.12     16.52      0.00      0.00      0.48
01:30:01  CDT      eth1     87.50     95.58     14.74     79.35      0.00      0.00      0.00
Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0    211.21    196.20    156.18     31.20      0.00      0.00      0.01
Average:         eth1    159.10    174.52     28.00    149.95      0.00      0.00      0.00

或者输入以下命令:

# sar -n DEV 1 3

输出样例:

Linux 2.6.32-220.2.1.el6.x86_64 (www.cyberciti.biz)    Tuesday 13 March 2012   _x86_64_        (2 CPU)
01:44:03  CDT     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
01:44:04  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:44:04  CDT      eth0    161.70    154.26    105.20     26.63      0.00      0.00      0.00
01:44:04  CDT      eth1    145.74    142.55     25.11    144.94      0.00      0.00      0.00
01:44:04  CDT     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
01:44:05  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:44:05  CDT      eth0    162.14    156.31    107.46     42.18      0.00      0.00      0.00
01:44:05  CDT      eth1    135.92    138.83     39.38    104.92      0.00      0.00      0.00
01:44:05  CDT     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
01:44:06  CDT        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:44:06  CDT      eth0    303.92    293.14    272.91     37.40      0.00      0.00      0.00
01:44:06  CDT      eth1    252.94    290.20     34.87    263.50      0.00      0.00      0.00
Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0    210.37    202.34    163.19     35.66      0.00      0.00      0.00
Average:         eth1    178.93    191.64     33.36    171.60      0.00      0.00      0.00

via: http://www.cyberciti.biz/faq/network-statistics-tools-rhel-centos-debian-linux/

作者:nixCraft 译者:ictlyh 校对:wxy

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

来源:https://linux.cn/article-5578-1.html

Linux:Ubuntu 系统的降温方案

安装ubuntu的朋友,可能你安装了系统但不知道或没有注意,你的电脑会很热。这种发热主要的原因之一是来自于硬盘的发热。因此通过以下两种方法来降低硬盘发热带来的影响。(以下方法不适用于 SSD 硬盘)

以下是我以前用过的两种降温方案,方法来自于网络。

Linux:Ubuntu 系统的降温方案
Linux:Ubuntu 系统的降温方案

方案一

1.安装laptop_mode

sudo apt-get install laptop-mode-tools

2.启动laptop_mode

sudo laptop_mode start

3.测试是否启用

cat /proc/sys/vm/laptop_mode

0 表示未启用 其他表示启用。

查看 laptop_mode 报告的详细状态。

sudo laptop_mode status 

4.先看一下自己硬盘的状态(sata硬盘)

sudo hdparm -I /dev/sda |grep Advanced

5.设定 laptop_mode 为启用

sudo gedit /etc/default/acpi-support

一般就是最后一行改成 ENABLE_LAPTOP_MODE=true

6.配置laptop-mode.conf

sudo gedit /etc/laptop-mode/laptop-mode.conf

ENABLE_LAPTOP_MODE_ON_AC=1 #当笔记本使用交流电时也开启laptop-mode
CONTROL_HD_IDLE_TIMEOUT=0 #关闭 HD_IDLE_TIMEOUT(硬盘进入待机)
CONTROL_READAHEAD=1 #启用readahead
LM_READAHEAD=4096
NOLM_READAHEAD=128 #readahead buffer,如果是听mp3 3-5M,如果是看电影 8-10M
ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED=1 # 这里好像是关闭笔记本盖子的功能设定
MINIMUM_BATTERY_CHARGE_PERCENT=11 # 关于电池电量达到11% 禁用laptop_mode
DISABLE_LAPTOP_MODE_ON_CRITICAL_BATTERY_LEVEL=8 #极低电量禁用 laptop_mode
CONTROL_HD_POWERMGMT=1 #启动硬盘电源的管理模式
BATT_HD_POWERMGMT=192
LM_AC_HD_POWERMGMT=192
NOLM_AC_HD_POWERMGMT=192 

方案二

这个简单。在ubuntu 里面,swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端,对于 ubuntu的默认设置,这个值等于60,建议修改为10。

1.查看你的系统里面的swappiness

sudo cat /proc/sys/vm/swappiness

可以看到是 60。

2.修改swappiness值为10

sudo gedit /etc/sysctl.conf

在这个文档的最后加上这样一行:

vm.swappiness=10

保存关闭。

3.重启

sudo reboot

 

来源:https://linux.cn/article-5588-1.html

Linux:在Linux中用chattr和lsattr命令管理文件和目录属性

为了允许添加数据,防止更改或者删除等,文件和文件夹可以设定了特定的控制属性。例如,你可以在关键的系统文件或者文件夹中启用属性,然后没有任何用户,包括root,可以删除或者修改它,比如不允许使用像dump这样的命令等备份工具去备份一个特定的文件或者文件夹,等等。这些属性只可以在ext2,ext3或者ext4文件系统中的文件和文件夹上设定。

Linux:在Linux中用chattr和lsattr命令管理文件和目录属性
Linux:在Linux中用chattr和lsattr命令管理文件和目录属性

有两个命令 lsattrchattr 用来管理属性。下面是常用属性的列表。

属性

描述

a (append)

允许在文件中进行追加操作

A

这个属性不允许更新文件的访问时间

c (compressed)

启用这个属性时,文件在磁盘上会自动压缩

d (dump)

不能使用dump命令备份文件

D

设置了文件夹的D属性时,更改会在同步保存在磁盘上

e (extent format)

它表明,该文件使用磁盘上的块的映射扩展

i (immutable)

在文件上启用这个属性时,我们不能更改、重命名或者删除这个文件

j (journaling)

设置了这个属性时,文件的数据首先保存在日志中,然后再写入文件

S (synchronous)

设置了这个属性时,变更或更改同步保存到磁盘上

chattr属性中可以使用的不同选项 :

  • -R 递归地修改文件夹和子文件夹的属性
  • -V chattr命令会输出带有版本信息的冗余信息
  • -f 忽略大部分错误信息

在chattr中用于设置或者取消属性的 操作符

  • ‘+’ 符号用来为文件和文件夹设置属性,
  • ‘-‘ 符号用来移除或者取消属性
  • ‘=’ 使它们成为文件有的唯一属性。

chattrlsattr 命令的基本语法 :

# chattr   
# lsattr 

例:1 使用‘i’属性使文件不可更改

[root@linuxtechi ~]# chattr +i dummy_data
[root@linuxtechi ~]# lsattr dummy_data
----i----------- dummy_data

现在试着删除或者修改文件

[root@linuxtechi ~]# rm -f dummy_data
rm: cannot remove 'dummy_data': Operation not permitted
[root@linuxtechi ~]# echo "test" >> dummy_data
-bash: dummy_data: Permission denied

例:2 移除不可更改属性

[root@linuxtechi ~]# chattr -i dummy_data
[root@linuxtechi ~]# lsattr dummy_data
---------------- dummy_data

例:3 在文件中只允许追加操作

[root@linuxtechi ~]# chattr +a dummy_data
[root@linuxtechi ~]# lsattr dummy_data
-----a---------- dummy_data

现在试着把fstab文件的内容追加到dummy_data文件

[root@linuxtechi ~]# cat /etc/fstab >> dummy_data
[root@linuxtechi ~]#

例 :4 使用 -R 选项和 ‘+i’ 属性使文件夹和它的子文件夹成为安全目录

让我们来新建一个sysadmin文件夹和它的子文件夹

[root@linuxtechi ~]# mkdir sysadmin
[root@linuxtechi ~]# mkdir sysadmin/admim_{1,2,3,4,5}
[root@linuxtechi ~]# ls -l sysadmin/
total 0
drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_1
drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_2
drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_3
drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_4
drwxr-xr-x. 2 root root 6 Apr 19 09:50 admim_5

在sysadmin文件夹递归设置不可更改属性

[root@linuxtechi ~]# chattr -R +i sysadmin
[root@linuxtechi ~]# lsattr -R sysadmin/
----i----------- sysadmin/admim_1
sysadmin/admim_1:
----i----------- sysadmin/admim_2
sysadmin/admim_2:
----i----------- sysadmin/admim_3
sysadmin/admim_3:
----i----------- sysadmin/admim_4
sysadmin/admim_4:
----i----------- sysadmin/admim_5
sysadmin/admim_5:
[root@linuxtechi ~]#

现在试着用rm命令删除文件夹

[root@linuxtechi ~]# rm -rf sysadmin
rm: cannot remove ‘sysadmin/admim_1’: Permission denied
rm: cannot remove ‘sysadmin/admim_2’: Permission denied
rm: cannot remove ‘sysadmin/admim_3’: Permission denied
rm: cannot remove ‘sysadmin/admim_4’: Permission denied
rm: cannot remove ‘sysadmin/admim_5’: Permission denied
[root@linuxtechi ~]#

使用以下命令递归取消属性

[root@linuxtechi ~]# chattr -R -i sysadmin

via: http://www.linuxtechi.com/file-directory-attributes-in-linux-using-chattr-lsattr-command/

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

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

来源:https://linux.cn/article-5590-1.html

Linux:Shell脚本编程初体验

Linux:Shell脚本编程初体验
Linux:Shell脚本编程初体验

通常,当人们提到“shell脚本语言”时,浮现在他们脑海中是bash,ksh,sh或者其它相类似的linux/unix脚本语言。脚本语言是与计算机交流的另外一种途径。使用图形化窗口界面(不管是windows还是linux都无所谓)用户可以移动鼠标并点击各种对象,比如按钮、列表、选框等等。但这种方式在每次用户想要计算机/服务器完成相同任务时(比如说批量转换照片,或者下载新的电影、mp3等)却是十分不方便。要想让所有这些事情变得简单并且自动化,我们可以使用shell脚本。

某些编程语言,像pascal、foxpro、C、java之类,在执行前需要先进行编译。它们需要合适的编译器来让我们的代码完成某个任务。

而其它一些编程语言,像php、javascript、visualbasic之类,则不需要编译器,因此它们需要解释器,而我们不需要编译代码就可以运行程序。

shell脚本也像解释器一样,但它通常用于调用外部已编译的程序。然后,它会捕获输出结果、退出代码并根据情况进行处理。

Linux世界中最为流行的shell脚本语言之一,就是bash。而我认为(这是我自己的看法)原因在于,默认情况下bash shell可以让用户便捷地通过历史命令(先前执行过的)导航,与之相反的是,ksh则要求对.profile进行一些调整,或者记住一些“魔术”组合键来查阅历史并修正命令。

好了,我想这些介绍已经足够了,剩下来哪个环境最适合你,就留给你自己去判断吧。从现在开始,我将只讲bash及其脚本。在下面的例子中,我将使用CentOS 6.6和bash-4.1.2。请确保你有相同版本,或者更高版本。

Shell脚本流

shell脚本语言就跟和几个人聊天类似。你只需把所有命令想象成能帮你做事的那些人,只要你用正确的方式来请求他们去做。比如说,你想要写文档。首先,你需要纸。然后,你需要把内容说给某个人听,让他帮你写。最后,你想要把它存放到某个地方。或者说,你想要造一所房子,因而你需要请合适的人来清空场地。在他们说“事情干完了”,那么另外一些工程师就可以帮你来砌墙。最后,当这些工程师们也告诉你“事情干完了”的时候,你就可以叫油漆工来给房子粉饰了。如果你让油漆工在墙砌好前就来粉饰,会发生什么呢?我想,他们会开始发牢骚了。几乎所有这些像人一样的命令都会说话,如果它们完成了工作而没有发生什么问题,那么它们就会告诉“标准输出”。如果它们不能做你叫它们做的事——它们会告诉“标准错误”。这样,最后,所有的命令都通过“标准输入”来听你的话。

快速实例——当你打开linux终端并写一些文本时——你正通过“标准输入”和bash说话。那么,让我们来问问bash shell who am i(我是谁?)吧。

root@localhost ~]# who am i                                <--- 你通过标准输入对 bash shell 说
root     pts/0        2015-04-22 20:17 (192.168.1.123)     <--- bash shell通过标准输出回答你

现在,让我们说一些bash听不懂的问题:

[root@localhost ~]# blablabla           <--- 哈,你又在和标准输入说话了
-bash: blablabla: command not found     <--- bash通过标准错误在发牢骚了

“:”之前的第一个单词通常是向你发牢骚的命令。实际上,这些流中的每一个都有它们自己的索引号(LCTT 译注:文件句柄号):

  • 标准输入(stdin) - 0
  • 标准输出(stdout) - 1
  • 标准错误(stderr) - 2

如果你真的想要知道哪个输出命令说了些什么——你需要将那次发言重定向到(在命令后使用大于号“>”和流索引)文件:

[root@localhost ~]# blablabla 1> output.txt
-bash: blablabla: command not found

在本例中,我们试着重定向流1(stdout)到名为output.txt的文件。让我们来看对该文件内容所做的事情吧,使用cat命令可以做这事:

[root@localhost ~]# cat output.txt
[root@localhost ~]#

看起来似乎是空的。好吧,现在让我们来重定向流2(stderr):

[root@localhost ~]# blablabla 2> error.txt
[root@localhost ~]#

好吧,我们看到牢骚话没了。让我们检查一下那个文件:

[root@localhost ~]# cat error.txt
-bash: blablabla: command not found
[root@localhost ~]#

果然如此!我们看到,所有牢骚话都被记录到errors.txt文件里头去了。

有时候,命令会同时产生stdoutstderr。要重定向它们到不同的文件,我们可以使用以下语句:

command 1>out.txt 2>err.txt

要缩短一点语句,我们可以忽略“1”,因为默认情况下stdout会被重定向:

command >out.txt 2>err.txt

好吧,让我们试试做些“坏事”。让我们用rm命令把file1和folder1给删了吧:

[root@localhost ~]# rm -vf folder1 file1 > out.txt 2>err.txt

现在来检查以下输出文件:

[root@localhost ~]# cat out.txt
removed `file1'
[root@localhost ~]# cat err.txt
rm: cannot remove `folder1': Is a directory
[root@localhost ~]#

正如我们所看到的,不同的流被分离到了不同的文件。有时候,这也不是很方便,因为我们想要查看出现错误时,在某些操作前面或后面所连续发生的事情。要实现这一目的,我们可以重定向两个流到同一个文件:

command >>out_err.txt 2>>out_err.txt

注意:请注意,我使用“>>”替代了“>”。它允许我们附加到文件,而不是覆盖文件。

我们也可以重定向一个流到另一个:

command >out_err.txt 2>&1

让我来解释一下吧。所有命令的标准输出将被重定向到out_err.txt,错误输出将被重定向到流1(上面已经解释过了),而该流会被重定向到同一个文件。让我们看这个实例:

[root@localhost ~]# rm -fv folder2 file2 >out_err.txt 2>&1
[root@localhost ~]# cat out_err.txt
rm: cannot remove `folder2': Is a directory
removed `file2'
[root@localhost ~]#

看着这些组合的输出,我们可以将其说明为:首先,rm命令试着将folder2删除,而它不会成功,因为linux要求-r键来允许rm命令删除文件夹,而第二个file2会被删除。通过为rm提供-v(详情)键,我们让rm命令告诉我们每个被删除的文件或文件夹。

这些就是你需要知道的,关于重定向的几乎所有内容了。我是说几乎,因为还有一个更为重要的重定向工具,它称之为“管道”。通过使用|(管道)符号,我们通常重定向stdout流。

比如说,我们有这样一个文本文件:

[root@localhost ~]# cat text_file.txt
This line does not contain H e l l o  word
This lilne contains Hello
This also containd Hello
This one no due to HELLO all capital
Hello bash world!

而我们需要找到其中某些带有“Hello”的行,Linux中有个grep命令可以完成该工作:

[root@localhost ~]# grep Hello text_file.txt
This lilne contains Hello
This also containd Hello
Hello bash world!
[root@localhost ~]#

当我们有个文件,想要在里头搜索的时候,这用起来很不错。当如果我们需要在另一个命令的输出中查找某些东西,这又该怎么办呢?是的,当然,我们可以重定向输出到文件,然后再在文件里头查找:

[root@localhost ~]# fdisk -l>fdisk.out
[root@localhost ~]# grep "Disk /dev" fdisk.out
Disk /dev/sda: 8589 MB, 8589934592 bytes
Disk /dev/mapper/VolGroup-lv_root: 7205 MB, 7205814272 bytes
Disk /dev/mapper/VolGroup-lv_swap: 855 MB, 855638016 bytes
[root@localhost ~]#

如果你打算grep一些双引号引起来带有空格的内容呢!

注意:fdisk命令显示关于Linux操作系统磁盘驱动器的信息。

就像我们看到的,这种方式很不方便,因为我们不一会儿就把临时文件空间给搞乱了。要完成该任务,我们可以使用管道。它们允许我们重定向一个命令的stdout到另一个命令的stdin流:

[root@localhost ~]# fdisk -l | grep "Disk /dev"
Disk /dev/sda: 8589 MB, 8589934592 bytes
Disk /dev/mapper/VolGroup-lv_root: 7205 MB, 7205814272 bytes
Disk /dev/mapper/VolGroup-lv_swap: 855 MB, 855638016 bytes
[root@localhost ~]#

如你所见,我们不需要任何临时文件就获得了相同的结果。我们把fdisk stdout重定向到了grep stdin

注意 : 管道重定向总是从左至右的。

还有几个其它重定向,但是我们将把它们放在后面讲。

在shell中显示自定义信息

正如我们所知道的,通常,与shell的交流以及shell内的交流是以对话的方式进行的。因此,让我们创建一些真正的脚本吧,这些脚本也会和我们讲话。这会让你学到一些简单的命令,并对脚本的概念有一个更好的理解。

假设我们是某个公司的总服务台经理,我们想要创建某个shell脚本来注册呼叫信息:电话号码、用户名以及问题的简要描述。我们打算把这些信息存储到普通文本文件data.txt中,以便今后统计。脚本它自己就是以对话的方式工作,这会让总服务台的工作人员的小日子过得轻松点。那么,首先我们需要显示提问。对于显示信息,我们可以用echo和printf命令。这两个都是用来显示信息的,但是printf更为强大,因为我们可以通过它很好地格式化输出,我们可以让它右对齐、左对齐或者为信息留出专门的空间。让我们从一个简单的例子开始吧。要创建文件,请使用你惯用的文本编辑器(kate,nano,vi,……),然后创建名为note.sh的文件,里面写入这些命令:

echo "Phone number ?"

如何运行/执行脚本?

在保存文件后,我们可以使用bash命令来运行,把我们的文件作为它的参数:

[root@localhost ~]# bash note.sh
Phone number ?

实际上,这样来执行脚本是很不方便的。如果不使用bash命令作为前缀来执行,会更舒服一些。要让脚本可执行,我们可以使用chmod命令:

[root@localhost ~]# ls -la note.sh
-rw-r--r--. 1 root root 22 Apr 23 20:52 note.sh
[root@localhost ~]# chmod +x note.sh
[root@localhost ~]# ls -la note.sh
-rwxr-xr-x. 1 root root 22 Apr 23 20:52 note.sh
[root@localhost ~]#

注意 : ls命令显示了当前文件夹内的文件。通过添加-la键,它会显示更多文件信息。

如我们所见,在chmod命令执行前,脚本只有读(r)和写(w)权限。在执行chmod +x后,它就获得了执行(x)权限。(关于权限的更多细节,我会在下一篇文章中讲述。)现在,我们只需这么来运行:

[root@localhost ~]# ./note.sh
Phone number ?

在脚本名前,我添加了 ./ 组合。.(点)在unix世界中意味着当前位置(当前文件夹),/(斜线)是文件夹分隔符。(在Windows系统中,我们使用反斜线 表示同样功能)所以,这整个组合的意思是说:“从当前文件夹执行note.sh脚本”。我想,如果我用完整路径来运行这个脚本的话,你会更加清楚一些:

[root@localhost ~]# /root/note.sh
Phone number ?
[root@localhost ~]#

它也能工作。

如果所有linux用户都有相同的默认shell,那就万事OK。如果我们只是执行该脚本,默认的用户shell就会用于解析脚本内容并运行命令。不同的shell的语法、内部命令等等有着一丁点不同,所以,为了保证我们的脚本会使用bash,我们应该添加#!/bin/bash到文件首行。这样,默认的用户shell将调用/bin/bash,而只有在那时候,脚本中的命令才会被执行:

[root@localhost ~]# cat note.sh
#!/bin/bash
echo "Phone number ?"

直到现在,我们才100%确信bash会用来解析我们的脚本内容。让我们继续。

读取输入

在显示信息后,脚本会等待用户回答。有个read命令用来接收用户的回答:

#!/bin/bash
echo "Phone number ?"
read phone

在执行后,脚本会等待用户输入,直到用户按[ENTER]键结束输入:

[root@localhost ~]# ./note.sh
Phone number ?
12345                               <--- 这儿是我输入的内容
[root@localhost ~]#

你输入的所有东西都会被存储到变量phone中,要显示变量的值,我们同样可以使用echo命令:

[root@localhost ~]# cat note.sh
#!/bin/bash
echo "Phone number ?"
read phone
echo "You have entered $phone as a phone number"
[root@localhost ~]# ./note.sh
Phone number ?
123456
You have entered 123456 as a phone number
[root@localhost ~]#

bash shell中,一般我们使用$(美元)符号来表明这是一个变量,除了读入到变量和其它为数不多的时候才不用这个$(将在今后说明)。

好了,现在我们准备添加剩下的问题了:

#!/bin/bash
echo "Phone number?"
read phone
echo "Name?"
read name
echo "Issue?"
read issue
[root@localhost ~]# ./note.sh
Phone number?
123
Name?
Jim
Issue?
script is not working.
[root@localhost ~]#

使用流重定向

太完美了!剩下来就是重定向所有东西到文件data.txt了。作为字段分隔符,我们将使用/(斜线)符号。

注意 : 你可以选择任何你认为是最好的分隔符,但是确保文件内容不会包含这些符号在内,否则它会导致在文本行中产生额外字段。

别忘了使用“>>”来代替“>”,因为我们想要将输出内容附加到文件末!

[root@localhost ~]# tail -2 note.sh
read issue
echo "$phone/$name/$issue">>data.txt
[root@localhost ~]# ./note.sh
Phone number?
987
Name?
Jimmy
Issue?
Keybord issue.
[root@localhost ~]# cat data.txt
987/Jimmy/Keybord issue.
[root@localhost ~]#

注意tail命令显示了文件的最后的n行。

搞定。让我们再来运行一次看看:

[root@localhost ~]# ./note.sh
Phone number?
556
Name?
Janine
Issue?
Mouse was broken.
[root@localhost ~]# cat data.txt
987/Jimmy/Keybord issue.
556/Janine/Mouse was broken.
[root@localhost ~]#

我们的文件在增长,让我们在每行前面加个日期吧,这对于今后摆弄这些统计数据时会很有用。要实现这功能,我们可以使用date命令,并指定某种格式,因为我不喜欢默认格式:

[root@localhost ~]# date
Thu Apr 23 21:33:14 EEST 2015                     <---- date命令的默认输出
[root@localhost ~]# date "+%Y.%m.%d %H:%M:%S"
2015.04.23 21:33:18                               <---- 格式化后的输出

有几种方式可以读取命令的输出到变量,在这种简单的情况下,我们将使用`(是反引号,不是单引号,和波浪号~在同一个键位):

[root@localhost ~]# cat note.sh
#!/bin/bash
now=`date "+%Y.%m.%d %H:%M:%S"`
echo "Phone number?"
read phone
echo "Name?"
read name
echo "Issue?"
read issue
echo "$now/$phone/$name/$issue">>data.txt
[root@localhost ~]# ./note.sh
Phone number?
123
Name?
Jim
Issue?
Script hanging.
[root@localhost ~]# cat data.txt
2015.04.23 21:38:56/123/Jim/Script hanging.
[root@localhost ~]#

嗯…… 我们的脚本看起来有点丑啊,让我们来美化一下。如果你要手动读取read命令,你会发现read命令也可以显示一些信息。要实现该功能,我们应该使用-p键加上信息:

[root@localhost ~]# cat note.sh
#!/bin/bash
now=`date "+%Y.%m.%d %H:%M:%S"`
read -p "Phone number: " phone
read -p "Name: " name
read -p "Issue: " issue
echo "$now/$phone/$name/$issue">>data.txt

你可以直接从控制台查找到各个命令的大量有趣的信息,只需输入:man read, man echo, man date, man ……

同意吗?它看上去是舒服多了!

[root@localhost ~]# ./note.sh
Phone number: 321
Name: Susane
Issue: Mouse was stolen
[root@localhost ~]# cat data.txt
2015.04.23 21:38:56/123/Jim/Script hanging.
2015.04.23 21:43:50/321/Susane/Mouse was stolen
[root@localhost ~]#

光标在消息的后面(不是在新的一行中),这有点意思。(LCTT 译注:如果用 echo 命令输出显示的话,可以用 -n 参数来避免换行。)

循环

是时候来改进我们的脚本了。如果用户一整天都在接电话,如果每次都要去运行,这岂不是很麻烦?让我们让这些活动都永无止境地循环去吧:

[root@localhost ~]# cat note.sh
#!/bin/bash
while true
do
        read -p "Phone number: " phone
        now=`date "+%Y.%m.%d %H:%M:%S"`
        read -p "Name: " name
        read -p "Issue: " issue
        echo "$now/$phone/$name/$issue">>data.txt
done

我已经交换了read phonenow=date行的位置。这是因为我想要在输入电话号码后再获得时间。如果我把它放在循环的首行,那么循环一次后,变量 now 就会在数据存储到文件中后马上获得时间。而这并不好,因为下一次呼叫可能在20分钟后,甚至更晚。

[root@localhost ~]# ./note.sh
Phone number: 123
Name: Jim
Issue: Script still not works.
Phone number: 777
Name: Daniel
Issue: I broke my monitor
Phone number: ^C
[root@localhost ~]# cat data.txt
2015.04.23 21:38:56/123/Jim/Script hanging.
2015.04.23 21:43:50/321/Susane/Mouse was stolen
2015.04.23 21:47:55/123/Jim/Script still not works.
2015.04.23 21:48:16/777/Daniel/I broke my monitor
[root@localhost ~]#

注意: 要从无限循环中退出,你可以按[Ctrl]+[C]键。Shell会显示^表示 CTRL 键

使用管道重定向

让我们添加更多功能到我们的“弗兰肯斯坦(Frankenstein)”,我想要脚本在每次呼叫后显示某个统计数据。比如说,我想要查看各个号码呼叫了我几次。对于这个,我们应该cat文件data.txt:

[root@localhost ~]# cat data.txt
2015.04.23 21:38:56/123/Jim/Script hanging.
2015.04.23 21:43:50/321/Susane/Mouse was stolen
2015.04.23 21:47:55/123/Jim/Script still not works.
2015.04.23 21:48:16/777/Daniel/I broke my monitor
2015.04.23 22:02:14/123/Jimmy/New script also not working!!!
[root@localhost ~]#

现在,所有输出我们都可以重定向到cut命令,让cut来把每行切成一块一块(我们使用分隔符“/”),然后打印第二个字段:

[root@localhost ~]# cat data.txt | cut -d"/" -f2
123
321
123
777
123
[root@localhost ~]#

现在,我们可以把这个输出重定向打另外一个命令sort

[root@localhost ~]# cat data.txt | cut -d"/" -f2|sort
123
123
123
321
777
[root@localhost ~]#

然后只留下唯一的行。要统计唯一条目,只需添加-c键到uniq命令:

[root@localhost ~]# cat data.txt | cut -d"/" -f2 | sort | uniq -c
    3 123
    1 321
    1 777
[root@localhost ~]#

只要把这个添加到我们的循环的最后:

#!/bin/bash
while true
do
        read -p "Phone number: " phone
        now=`date "+%Y.%m.%d %H:%M:%S"`
        read -p "Name: " name
        read -p "Issue: " issue
        echo "$now/$phone/$name/$issue">>data.txt
        echo "===== We got calls from ====="
        cat data.txt | cut -d"/" -f2 | sort | uniq -c
        echo "--------------------------------"
done

运行:

[root@localhost ~]# ./note.sh
Phone number: 454
Name: Malini
Issue: Windows license expired.
===== We got calls from =====
    3 123
    1 321
    1 454
    1 777
--------------------------------
Phone number: ^C

当前场景贯穿了几个熟知的步骤:

  • 显示消息
  • 获取用户输入
  • 存储值到文件
  • 处理存储的数据

但是,如果用户有点责任心,他有时候需要输入数据,有时候需要统计,或者可能要在存储的数据中查找一些东西呢?对于这些事情,我们需要使用switches/cases,并知道怎样来很好地格式化输出。这对于在shell中“画”表格的时候很有用。


via: http://linoxide.com/linux-shell-script/guide-start-learning-shell-scripting-scratch/

作者:Petras Liumparas 译者:GOLinux 校对:wxy

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

来源:https://linux.cn/article-5591-1.html

Linux:如何在 Linux 上用 IP转发使内部网络连接到互联网

大家好,今天我们学习一下在 Linux 上用 iptables 实现从一个网络接口到另一个接口的IP转发(数据包转发)。IP转发的概念是,使 Linux 机器像路由器一样将数据从一个网络发送到另一个网络。所以,它能作为一个路由器或者代理服务器,实现将一个连接的互联网或者网络连接共享给多个客户端机器。

这是一些启用IP转发或网络包转发方法的简单步骤。

Linux:如何在 Linux 上用 IP转发使内部网络连接到互联网
Linux:如何在 Linux 上用 IP转发使内部网络连接到互联网

1. 启用 IPv4 转发

首先,我们需要在我们的 Linux 操作系统上启用 IPv4 转发。要做到这点,我们需要用 sudo 模式在 shell 或终端下执行下面的命令。

$ sudo -s
# echo 1 > /proc/sys/net/ipv4/ip_forward

临时IP转发

注意:上面的命令能马上启用ip转发,但只是临时的,直到下一次重启。要永久启用,我们需要使用我们惯用的文本编辑器打开 /etc/sysctl.conf 文件。

# nano /etc/sysctl.conf

然后,增加 net.ipv4.ip_forward = 1 到文件中,或者删除那行的注释,保存并退出文件。

net.ipv4.ip_forward = 1
Linux:如何在 Linux 上用 IP转发使内部网络连接到互联网
Linux:如何在 Linux 上用 IP转发使内部网络连接到互联网

运行下面的命令启用更改。

# sysctl -p /etc/sysctl.conf

启用 Sysctl 更改

2. 配置 Iptables 防火墙

我们需要允许特定的(或者所有的)数据包通过我们的路由器。在这之前,我们要知道连接我们 Linux 的网络设备的接口名称。我们可以通过在终端或者 shell 运行以下命令获得接口名称。

# ifconfig -a
Linux:如何在 Linux 上用 IP转发使内部网络连接到互联网
Linux:如何在 Linux 上用 IP转发使内部网络连接到互联网

这里,在我们的机器中, eth2 是连接到互联网或者网络的网卡接口, wlan2 是我们要使用 iptables 从 eth2 转发数据包的接口。要实现转发,我们需要运行以下命令。

# iptables -A FORWARD -i wlan2 -o eth2 -j ACCEPT

注意:请用你 Linux 机器中的可用设备名称替换 wlan2 和 eth2。

现在,由于netfilter/iptables是一个无状态的防火墙,我们需要让 iptables 允许已建立的连接通过。要做到这点,我们要运行下面的命令。

# iptables -A FORWARD -i eth2 -o wlan2 -m state --state ESTABLISHED,RELATED  -j ACCEPT

用 iptables 转发

3. 配置 NAT

然后,最后我们需要通过执行下面的命令修改发送到互联网的数据包的源地址为 eth2。

# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

配置 nat

总结

最后,我们在我们以 iptables 作为防火墙 Linux 机器上成功的配置了从一个接口到另一个接口的数据包转发。这篇文章教给你将你的私有接口连接到互联网,不需要桥接接口,而是将从一个接口进来的数据包路由到另一个接口。就是这些,如果你有任何问题、建议、反馈,请写到下面的评论框中,然后我们可以改进或更新我们的内容。非常感谢!享受吧 🙂


via: http://linoxide.com/firewall/ip-forwarding-connecting-private-interface-internet/

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

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

来源:https://linux.cn/article-5595-1.html