2014年12月

本文并没有什么新鲜的。我只是收集了一些不太重要的语句,但这些语句可能对初级程序员来说很重要。也就是些无聊的旧东西。

如果以下的这些你都知道的话,那么你比Java的了解已经超过了对一个平常的家庭主妇的了解。我不知道清楚所有的这些是否是有意义的。即使不知道其中的一些特性,你照样也可以成为一个相当不错的Java程序员。然而,本文中许多的新信息可能表明你还有很大的发展空间。

Java中有四种不同的访问类型(而不是三种)

这四种类型包括:private, package private (包访问权限,无修饰符,又叫default, 译者注)。如果你在类中定义一个元素时并不加任何访问类型修饰符,它将被默认设置为包访问权限(package private),而不是public或者protected。

Java中有四种级别的访问类型

Java有四个级别的访问类型。

从另一方面来说,如果在接口中,你不指定方法的访问修饰符,那么它将是public类型的。你也可以显式地指定它为public类型, 但这并不符合SONAR(一个开源代码质量管理平台,译者注)的代码质量管理思想。

访问类型是传递的

访问类型是传递的

我的“在Java中允许选择性的在接口的方法中写public”的观点是一个技术错误。

同样你也可在接口的字段前写final,甚至是static。这说明这些字段可以是非静态或非final吗?不是的,接口中的字段中总是final和static的。

Protected和package private是不一样的

Package private(或者default)访问类型可以使得相同包(package)下其他类能够访问这些字段或方法。保护类型(protected)的方法和字段可以被相同包下的类使用(这和package private是一样的),同时它也可以被其他类使用,只要那个类继承了这个包含这些protected方法或字段的类。

Protected是可传递的

如果有三个包a、b、c,每个包都分别包含A、B、C类,而且B继承A,C继承B,那么C可以访问A中的protected字段和方法。

package a;

public class A {
    protected void a() {

    }
}
package b;

import a.A;

public class B extends A {
    protected void b() {
        a();
    }
}
package c;

import b.B;

public class C extends B {
    protected void c() {
        a();
    }
}

接口不能定义protected方法

很多人认为可以在接口中定义protected方法。如果你这么做的话,编译器很快就会毫不留情地给你报错。顺便说下,这也就是我为什么认为允许public关键字在接口中是一个技术错误,它会让人觉得还可以写其他访问类型似的。

Private is the new public

private是一种新的public

如果你还想在一个接口的方法中声明protected方法,你可能还不理解封装的含义。

此private非彼private

私有变量和方法在编译单元内是可见的。如果这听起来太神秘的话,换种说法:几乎就是在同一个Java文件中。这比“在它们被定义的类中”听起来好理解些。它们在同一编译单元的类和接口中也是可见的。嵌套类可以看到类中封装的私有字段和方法。然而,当前封闭类也可以看到该类下任何深度下类中的私有方法和字段。

package a;

class Private {
    private class PrivateInPrivate {
        private Object object;
    }

    Object m() {
        return new PrivateInPrivate().object;
    }
}

后者并不广为人知,事实上也很少有用到。

Private是类的访问级别而不是对象

如果你可以访问一个变量或方法,那么不管它属于哪个对象你都可以访问它。如果this.a可以访问到,那another.a也可以访问到,只要它们是同一个类的实例。同一个类的实例对象可以随意调用其他实例的变量或方法。不过这样的代码一般都没有意义。现实生活中异常是equals()(由Eclipse生成, 15 - 18行):

package a;

public class PrivateIsClass {
    private Object object;

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        PrivateIsClass other = (PrivateIsClass) obj;
        if (object == null) {
            if (other.object != null)
                return false;
        } else if (!object.equals(other.object))
            return false;
        return true;
    }
}

静态(static)类可能有很多实例

Protection is not object level. It is class level.

访问类型不是对象级别的而是类级别的。

那些不支持有任何实例的类,通常被称为实用工具类。它们只包含静态字段和静态方法以及唯一的不被该类的任何静态方法调用的私有构造函数。在Java 8中也可以有这样的一个野兽(这个词翻译不通,译者注)在接口中实现,因为Java 8的接口可以有静态方法。我不觉得我们应该使用这个特性而不是实用工具类。我也不完全确信我们应该使用实用工具类。

静态类总是在另一个类或接口中。它们是嵌套类。他们是静态的,就像静态方法不能访问类的实例方法和字段一样,静态内部类也不能访问嵌入类的实例方法和字段。这是因为内部类没有嵌入类实例的引用(或者说是指针,如果你喜欢这么叫的话)。内部类(内部类,也即非静态嵌套类, 译者注),而非静态嵌套类, 没有嵌入类的一个实例,它是无法被创建的。每个内部类的实例都具有嵌入类实例的一个引用,因此一个内部类可以访问嵌入类的实例方法和字段。

因为这个原因,要是没有外部类的一个实例,你就不能创建一个内部类。当然,如果是当前对象,也就是this的话,你就可以不需要指定它。在这种情况下你可以使用new, 在这种情况下,也就是this.new的简式。在一个静态的环境中,例如从一个静态方法,你必须指定内部类应该创建哪个封闭类的实例。见第10行:

package a;

class Nesting {
    static class Nested {}
    class Inner {}
    void method(){
        Inner inner = new Inner();
    }
    static void staticMethod(){
        Inner inner = new Nesting().new Inner();
    }
}

匿名类只能访问final变量

Variable has to be effective final

变量必须是有效的final

当一个匿名类被定义在一个方法中,它可以访问局部变量如果该变量是final的。但这说的有点模糊。它们不得不声明成final,他们还必须是有效final。这也是Java 8中发布的一些特性。你不需要声明这些变量为final型,但它们仍然必须是有效的final。

Java 8 does not require final, only effective final

Java 8并不要求final,只要求有效final。

为什么你需要对一些东西声明final,当它被检查必须是这样的。就像方法的参数。它们也必须是final的。你说这不是Java所必须的吗?嗯,你是对的。这只是一个良好的编程风格所必须的。


via: http://www.javacodegeeks.com/2014/11/some-sentences-about-java.html

作者:Peter Verhas 译者:a598799539 校对:wxy

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

Linux 操作系统和许多应用程序会创建特殊的文件来记录它们的运行事件,这些文件通常被称作“日志”。当要了解操作系统或第三方应用程序的行为或进行故障排查时,这些系统日志或特定的应用程序日志文件是必不可少的的工具。但是,日志文件并没有您们所谓的“清晰”或“容易”这种程度的可读性。手工分析原始的日志文件简直是浪费时间,并且单调乏味。出于这个原因,对于系统管理员来说,发现任何一款能把原始的日志文件转换成更人性化的记录摘要的工具,将会受益无穷。

logwatch 是一款用 Perl 语言编写的开源日志解析分析器。它能对原始的日志文件进行解析并转换成结构化格式的文档,也能根据您的使用情况和需求来定制报告。logwatch 的主要目的是生成更易于使用的日志摘要,并不是用来对日志进行实时的处理和监控的。正因为如此,logwatch 通常被设定好时间和频率的自动定时任务来调度运行或者是有需要日志处理的时候从命令行里手动运行。一旦日志报告生成,logwatch 可以通过电子邮件把这报告发送给您,您可以把它保存成文件或者直接显示在屏幕上。

Logwatch 报告的详细程度和报告覆盖范围是完全可定制化的。Logwatch 的日志处理引擎也是可扩展的,从某种意义上来说,如果您想在一个新的应用程序中使用 logwatch 功能的话,只需要为这个应用程序的日志文件编写一个日志处理脚本(使用 Perl 语言),然后挂接到 logwatch 上就行。

logwatch 有一点不好的就是,在它生成的报告中没有详细的时间戳信息,而原来的日志文件中是存在的。您只能知道被记录下来的一段时间之内的特定事件,如果想要知道精确的时间点的信息,就不得不去查看原日志文件了。

安装 Logwatch

在 Debian 系统或其派生的系统上:

# aptitude install logwatch 

在基于 Red Hat 的发布系统上:

# yum install logwatch 

配置 Logwatch

安装时,主要的配置文件(logwatch.conf)被放到 /etc/logwatch/conf 目录中。此文件(默认是空的)定义的设置选项会覆盖掉定义在 /usr/share/logwatch/default.conf/logwatch.conf 文件中的系统级设置。

在命令行中,启动 logwatch, 如果不带参数的话,将会使用 /etc/logwatch/conf/logwatch.conf 文件中定义的选项。但,只要一指定参数,它们就会覆盖 /etc/logwatch/conf/logwatch.conf 文件中的任意默认/自定义设置。

这篇文章里,我们会编辑 /etc/logwatch/conf/logwatch.conf 文件来对一些默认的设置项做些个性化设置。

Detail = <Low, Med, High, 或数字>

“Detail” 配置指令控制着 logwatch 报告的详细程度。它可以是个正整数,也可以是分别代表着10、5和0数字的 High、Med、Low 几个选项。

MailTo = [email protected]

如果您让把一份 logwatch 的报告邮件给您,就要使用 “MailTo” 这个配置指令。要把一份报告发送给多个用户,只需要把他们的邮件地址用空格格开,然后配置上去。但是,您需要在 logwatch 运行的服务器上配置好本地邮件传输代理(MTA)如,sendmail、 Postfix 等,这个配置指令项才能起作用。

Range = <Yesterday|Today|All>

"Range" 配置指令定义了生成 logwatch 报告的时间段信息。这个指令通常可选的值是 Yesterday、Today、All。当作用了“Rang = All”时,“Archive = yes” 这个指令项也必须配置上,那么所有的已存档的日志文件 (比如,/var/log/maillog、/var/log/maillog.X 或 /var/log/maillog.X.gz 文件)都会被处理到。

除了这些通用的 range 值,您也可以使用复杂点的选择值,如下所示:

  • Range = "2 hours ago for that hour"
  • Range = "-5 days"
  • Range = "between -7 days and -3 days"
  • Range = "since September 15, 2014"
  • Range = "first Friday in October"
  • Range = "2014/10/15 12:50:15 for that second"

要使用上面例子中自由形式的 range,您需要从 CPAN(注:Comprehensive Perl Archive Network) 上下载安装 Perl 的 Date::Manip 模块。关于 CPAN 模块的安装说明,请请参阅此帖

Service = <service-name-1>
Service = <service-name-2>
. . .

“Service” 选项指定想要监控的一个或多个服务。在 /usr/share/logwatch/scripts/services 目录下列出的服务都能被监控,它们已经涵盖了重要的系统服务(例如:pam,secure,iptables,syslogd 等),也涵盖了一些像 sudo、sshd、http、fail2ban、samba等主流的应用服务。如果您想添加新的服务到列表中,得编写一个相应的日志处理 Perl 脚本,并把它放在这个目录中。

如果这个选项要用来选择特定的服务话,您需要把 /usr/share/logwatch/default.conf/logwatch.conf 文件中的 "Service = All " 这一行注释掉。

Format = <text|html>

“Format” 配置指令定义了一份 logwatch 报告的格式(比如 text 或者 HTML)。

Output = <file|mail|stdout>

"Output" 配置指令定义生成的 logwatch 报告要发送的目的地。它能被保存成文件(file),生成电子邮件(mail)或者是直接在屏幕上显示(stdout)。

用 Logwatch 来分析日志文件

要弄明白怎么使用 logwatch 来分析日志文件,可以参考下面的 logwatch.conf 文件例子:

Detail = High
MailTo = [email protected]
Range = Today
Service = http
Service = postfix
Service = zz-disk_space
Format = html
Output = mail

使用这些设置,logwatch 将会处理三个应用服务(http、postfix 和 zz-disk\_space)当天产生的日志,生成一份非常详细的 HTML 格式报告,然后邮件给您。

如果您不想个性化 /etc/logwatch/conf/logwatch.conf,您可以不修改此文件让其默认,然后在命令行里运行如下所示的命令。也会得到同样的输出。

# logwatch --detail 10 --mailto [email protected] --range today --service http --service postfix --service zz-disk_space --format html --output mail 

电子邮件发送的报告样子如图示:

这份电子邮件头部包含指向导航到报告细节的链接,在每个选中的服务细节,也会有“返回顶部”的链接。

接收人很少的情况下您可能会使用电子邮件发送报告这个选项。其它情况下,您可能会把让其生成为 HTML 格式的报告,这样每个想看这份报告的人都可以从网络共享里看到。只需要把上面例子中的配置做些修改就可以实现:

Detail = High
Range = Today
Service = http
Service = postfix
Service = zz-disk_space
Format = html
Output = file
Filename = /var/www/html/logs/dev1.html

同样的,也可以在命令行中运行如下的命令。

# logwatch --detail 10 --range today --service http --service postfix --service zz-disk_space --format html --output file --filename /var/www/html/logs/dev1.html 

最后,让我们使用 cron 来配置 logwatch 的定时执行任务。下面的例子中,将会在每个工作日的下午 12:15 分运行 logwatch 调度任务。

# crontab -e 

15 12 * * 1,2,3,4,5 /sbin/logwatch

希望这会有所帮助。欢迎到社区发表评论或分享自己的心得和体会!


via: http://xmodulo.com/monitor-log-file-linux-logwatch.html

作者:Gabriel Cánepa 译者:runningwater 校对:wxy

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

Bourne Shell 的 if 语句和大部分编程语言一样 - 检测条件是否真实,如果条件为真,shell 会执行这个 if 语句指定的代码块,如果条件为假,shell 就会跳过 if 代码块,继续执行之后的代码。

if 语句的语法:

if [ 判断条件 ]
then
        command1
        command2
        ……..
        last_command
fi

Example:

#!/bin/bash
number=150
if [ $number -eq 150 ]
then
    echo "Number is 150"
fi

if-else 语句:

除了标准的 if 语句之外,我们还可以加入 else 代码块来扩展 if 语句。这么做的主要目的是:如果 if 条件为真,执行 if 语句里的代码块,如果 if 条件为假,执行 else 语句里的代码块。

语法:

if [ 判断条件 ]
then
       command1
       command2
       ……..
       last_command
else
       command1
       command2
       ……..
       last_command
fi

Example:

#!/bin/bash
number=150
if [ $number -gt 250 ]
then
    echo "Number is greater"
else
    echo "Number is smaller"
fi

If..elif..else..fi 语句 (简写的 else if)

Bourne Shell 的 if 语句语法中,else 语句里的代码块会在 if 条件为假时执行。我们还可以将 if 语句嵌套到一起,来实现多重条件的检测。我们可以使用 elif 语句(else if 的缩写)来构建多重条件的检测。

语法 :

if [ 判断条件1 ]
then
       command1
       command2
       ……..
       last_command
elif [ 判断条件2 ]
then
        command1
        command2
        ……..
        last_command
else
command1
command2
……..
last_command
fi

Example :

#!/bin/bash
number=150
if [ $number -gt 300 ]
then
    echo "Number is greater"
elif [ $number -lt 300 ]
then
    echo "Number is Smaller"
else
    echo "Number is equal to actual value"
fi

多重 if 语句 :

If 和 else 语句可以在一个 bash 脚本里相互嵌套。关键词 “fi” 表示里层 if 语句的结束,所有 if 语句必须使用 关键词 “fi” 来结束。

基本 if 语句的嵌套语法

if [ 判断条件1 ]
then
        command1
        command2
        ……..
        last_command
else
if [ 判断条件2 ]
then
        command1
        command2
        ……..
        last_command
else
        command1
        command2
         ……..
         last_command
      fi
fi

Example:

#!/bin/bash
number=150
if [ $number -eq 150 ]
then
   echo "Number is 150"
else
if [ $number -gt 150 ]
then
    echo "Number is greater"
else
    echo "'Number is smaller"
   fi
fi

via: http://www.linuxtechi.com/shell-scripting-checking-conditions-with-if/

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

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

一段时间以来,我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具。在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接,大致将其划分为两类,基于命令行的和提供图形化接口的。

基于命令行的性能监控工具

1. dstat - 多类型资源统计工具

该命令整合了vmstatiostatifstat三种命令。同时增加了新的特性和功能可以让你能及时看到各种的资源使用情况,从而能够使你对比和整合不同的资源使用情况。通过不同颜色和区块布局的界面帮助你能够更加清晰容易的获取信息。它也支持将信息数据导出到cvs格式文件中,从而用其他应用程序打开,或者导入到数据库中。你可以用该命令来监控cpu,内存和网络状态随着时间的变化

2. atop - 相比top更好的ASCII码体验

这个使用ASCII码显示方式的命令行工具是一个显示所有进程活动的性能监控工具。它可以展示每日的系统日志以进行长期的进程活动分析,并高亮显示过载的系统使用资源。它包含了CPU,内存,交换空间,磁盘和网络层的度量指标。所有这些功能只需在终端运行atop即可。

# atop

当然你也可以使用交互界面来显示数据并进行排序。

3. Nmon - 类Unix系统的性能监控

Nmon是Nigel's Monitor缩写,它最早开发用来作为AIX的系统监控工具。如果使用在线模式,可以使用光标键在屏幕上操作实时显示在终端上的监控信息。使用捕捉模式能够将数据保存为CSV格式,方便进一步的处理和图形化展示。

更多的信息参考使用nmon进行性能监控的文章。

4. slabtop - 显示内核slab缓存信息

这个应用能够显示缓存分配器是如何管理Linux内核中缓存的不同类型的对象。这个命令类似于top命令,区别是它的重点是实时显示内核slab缓存信息。它能够显示按照不同排序条件来排序显示缓存列表。它同时也能够显示一个slab层信息的统计信息的题头。举例如下:

# slabtop --sort=a
# slabtop -s b
# slabtop -s c
# slabtop -s l
# slabtop -s v
# slabtop -s n
# slabtop -s o

更多的信息参考监控内核slab缓存的文章。

5. sar - 性能监控和瓶颈检查

sar 命令可以将操作系统上所选的累积活动计数器内容信息输出到标准输出上。其基于计数值和时间间隔参数的审计系统,会按照指定的时间间隔输出指定次数的监控信息。如果时间间隔参数为设置为0,那么sar命令将会显示系统从开机到当时时刻的平均统计信息。有用的命令如下:

# sar -u 2 3
# sar -u -f /var/log/sa/sa05
# sar -P ALL 1 1
# sar -r 1 3
# sar -W 1 3

6. Saidar - 简单的统计监控工具

Saidar是一个简单轻量的系统信息监控工具。虽然它无法提供大多性能报表,但是它能够通过一个简单明了的方式显示最有用的系统运行状况数据。你可以很容易地看到运行时间、平均负载、CPU、内存、进程、磁盘和网络接口统计信息。

Usage: saidar [-d delay] [-c] [-v] [-h]

-d 设置更新时间(秒)
-c 彩色显示
-v 显示版本号
-h 显示本帮助

7. top - 经典的Linux任务管理工具

作为一个广为人知的Linux工具,top是大多数的类Unix操作系统任务管理器。它可以显示当前正在运行的进程的列表,用户可以按照不同的条件对该列表进行排序。它主要显示了系统进程对CPU和内存的使用状况。top可以快速检查是哪个或哪几个进程挂起了你的系统。你可以在这里看到top使用的例子。 你可以在终端输入top来运行它并进入到交互模式:

交互模式的一些快捷操作:

    全局命令: <回车/空格> ?, =, A, B, d, G, h, I, k, q, r, s, W, Z
    统计区的命令: l, m, t, 1
    任务区的命令:
         外观: b, x, y, z 内容: c, f, H, o, S, u 大小: #, i, n 排序: <, >, F, O, R
    色彩方案: <Ret>, a, B, b, H, M, q, S, T, w, z, 0 - 7
    窗口命令:  -, _, =, +, A, a, G, g, w

8. Sysdig - 系统进程的高级视图

Sysdig是一个能够让系统管理员和开发人员以前所未有方式洞察其系统行为的监控工具。其开发团队希望改善系统级的监控方式,通过提供关于存储,进程,网络和内存子系统的统一有序以及粒度可见的方式来进行错误排查,并可以创建系统活动记录文件以便你可以在任何时间轻松分析。

简单例子:

# sysdig proc.name=vim
# sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"
# sysdig evt.type=chdir and user.name=root
# sysdig -l
# sysdig -L
# sysdig -c topprocs_net
# sysdig -c fdcount_by fd.sport "evt.type=accept"
# sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"
# sysdig -c topprocs_file
# sysdig -c fdcount_by proc.name "fd.type=file"
# sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open
# sysdig -c topprocs_cpu
# sysdig -c topprocs_cpu evt.cpu=0
# sysdig -p"%evt.arg.path" "evt.type=chdir and user.name=root"
# sysdig evt.type=open and fd.name contains /etc

更多的信息参考:如何利用sysdig改善系统层次的监控和错误排查

9. netstat - 显示开放的端口和连接

它是Linux管理员使用来显示各种网络信息的工具,如查看什么端口开放和什么网络连接已经建立以及何种进程运行在该连接之上。同时它也显示了不同程序间打开的Unix套接字的信息。作为大多数Linux发行版本的一部分,netstat的许多命令在netstat和它的不同输出中有详细的描述。最为常用的如下:

$ netstat | head -20
$ netstat -r
$ netstat -rC
$ netstat -i
$ netstat -ie
$ netstat -s
$ netstat -g
$ netstat -tapn

10. tcpdump - 洞察网络封包

tcpdump可以用来查看网络连接封包内容。它显示了传输过程中封包内容的各种信息。为了使得输出信息更为有用,它允许使用者通过不同的过滤器获取自己想要的信息。可以参照的例子如下:

# tcpdump -i eth0 not port 22
# tcpdump -c 10 -i eth0
# tcpdump -ni eth0 -c 10 not port 22
# tcpdump -w aloft.cap -s 0
# tcpdump -r aloft.cap
# tcpdump -i eth0 dst port 80

更多的信息可以在使用topdump捕捉包中找到详细描述。

11. vmstat - 虚拟内存统计信息

vmstat是虚拟内存(virtual memory statistics)的缩写,作为一个内存监控工具,它收集和显示关于内存进程终端分页I/O阻塞的概括信息。作为一个开源程序,它可以在大部分Linux发行版本中找到,包括Solaris和FreeBSD。它用来诊断大部分的内存性能问题和其他相关问题。

更多的信息参考vmstat命令的文章。

12. free - 内存统计信息

free是另一个能够在终端中显示内存和交换空间使用的命令行工具。由于它的简易,它经常用于快速查看内存使用或者是应用于不同的脚本和应用程序中。在这里你可以看到这个小程序的许多应用。几乎所有的系统管理员日常都会用这个工具。:-)

13. Htop - 更加友好的top

Htop基本上是一个top改善版本,它能够以更加多彩的方式显示更多的统计信息,同时允许你采用不同的方式进行排序,它提供了一个用户友好的接口。

更多的信息参考我们的文章:“关于htop和top的比较”。

14. ss - 网络管理的现代替代品

ssiproute2包的一部分。iproute2是用来替代一整套标准的Unix网络工具组件,它曾经用来完成网络接口配置,路由表和管理ARP表任务。ss工具用来记录套接字统计信息,它可以显示类似netstat一样的信息,同时也能显示更多TCP和状态信息。一些例子如下:

# ss -tnap
# ss -tnap6
# ss -tnap
# ss -s
# ss -tn -o state established -p

15. lsof - 列表显示打开的文件

lsof命令,意为“list open files”, 用于在许多类Unix系统中显示所有打开的文件及打开它们的进程。在大部分Linux发行版和其他类Linux操作系统中系统管理员用它来检查不同的进程打开了哪些文件。

# lsof +p process_id
# lsof | less
# lsof –u username
# lsof /etc/passwd
# lsof –i TCP:ftp
# lsof –i TCP:80

更多的信息参考我们的文章:lsof 的使用

16. iftop - 类似top的了网络连接工具

iftop是另一个基于网络信息的类似top的程序。它能够显示当前时刻按照带宽使用量或者上传或者下载量排序的网络连接状况。它同时提供了下载文件的预估完成时间。

更多的信息参考Linux流量监控工具:iftop

17. iperf - 网络性能工具

iperf是一个网络测试工具,能够创建TCPUDP数据连接并在网络上测量它们的传输性能。它支持调节关于时间,协议和缓冲等不同的参数。对于每一个测试,它会报告带宽,丢包和其他的一些参数。

如果你想用使用这个工具,可以参考这篇文章: 如何安装和使用iperf

18. Smem - 高级内存报表工具

Smem是最先进的Linux命令行工具之一,它提供关于系统中已经使用的和共享的实际内存大小,试图提供一个更为可靠的当前内存使用数据。

$ smem -m
$ smem -m -p | grep firefox
$ smem -u -p
$ smem -w -p

参考我们的文章:Smem更多的例子

图形化或基于Web的性能工具

19. Icinga - Nagios的社区分支版本

Icinga是一个开源免费的网络监控程序,作为Nagios的分支,它继承了前者现有的大部分功能,同时基于这些功能又增加了社区用户要求已久的功能和补丁。

更多信息请参考安装和配置lcinga文章

20. Nagios - 最为流行的监控工具

作为在Linux上使用最为广泛和最为流行的监控方案,它有一个守护程序用来收集不同进程和远程主机的信息,这些收集到的信息都通过功能强大的web界面进行呈现。

你可以在文章“如何安装nagios”里面找到更多的信息。

21. Linux process explorer - Linux下的procexp

Linux process explorer是一个Linux下的图形化进程浏览工具。它能够显示不同的进程信息,如进程数,TCP/IP连接和每一个进程的性能指标。作为Windowsprocexp在Linux的替代品,是由Sysinternals开发的,其目标是比topps提供更好用户体验。

查看 linux process explorer 的文章获取更多信息。

22. Collectl - 性能监控工具

你可以既可以通过交互的方式使用这个性能监控工具,也可以用它把报表写到磁盘上,并通过web服务器来访问。它以一种易读易管理的格式,显示了CPU,磁盘,内存,网络,网络文件系统,进程,slabs等统计信息。

更多信息请参看Collectl的文章

23. MRTG - 经典网络流量监控图形工具

这是一个采用rrdtool的生成图形的流量监控工具。作为最早的提供图形化界面的流量监控工具,它被广泛应用在类Unix的操作系统中。查看我们关于如何使用MRTG的文章获取更多关于安装和配置的信息。

24. Monit - 简单易用的监控工具

Monit是一个用来监控进程系统加载文件系统目录文件等的开源的Linux工具。你能够让它自动化维护和修复,也能够在运行错误的情景下执行特定动作或者发邮件报告提醒系统管理员。

如果你想要用这个工具,你可以查看如何使用Monit的文章

25. Munin - 为服务器提供监控和提醒服务

作为一个网络资源监控工具,Munin能够帮助分析资源趋势和查看薄弱环节以及导致产生性能问题的原因。开发此软件的团队希望它能够易用和用户体验友好。该软件是用Perl开发的,并采用rrdtool来绘制图形,使用了web界面进行呈现。开发人员推广此应用时声称当前已有500多个监控插件可以“即插即用”。

更多信息可以在关于Munin的文章中找到。


via: http://linoxide.com/monitoring-2/linux-performance-monitoring-tools/

作者:Adrian Dinu 译者:andyxue 校对:wxy

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

自从2010年首次出现,Ubuntu 的声音菜单已经被证明是Unity 桌面上的最流行的独有特性之一。

把音乐播放器与音量控制程序集成到一个标准的界面里是一种看起来很聪明的做法,这样就不用到处找声音相关的各种程序。人们不禁要问,为什么其它操作系统没有效仿这种做法!

臃肿

尽管它看起来很方便,但是这个小应用当前存在一个问题:很多播放器都堆在一起,像一个组合音响一样。也许你用得着,但是你安装的所有的媒体播放器都挤在这里,这会让人看着很累赘和反感。

我将要打赌,当你读到这里时,一定发现上面的截图看起来很熟悉!不要担心,dconf-editor可以解决它。

从Ubuntu 声音菜单中移除播放器

第一部分: 基础知识

最快速和最简单地从声音菜单中移除播放器的方法就是卸载相关的应用程序。但这是极端的方式,我的意思是指你也许想要保留应用程序,但是不需要它集成到菜单里面。

只删除播放器但是保留我们需要的应用程序,我们用到一个看起来令人惊讶的工具叫“dconf-editor”。

你可能已经安装了,如果没有安装的话,那么你从Ubuntu软件中心找出。

一旦安装完毕,找到Unity Dash并打开。打开的时候不要惊慌;你没有到2002年,它确实是这种古老的样子。

使用右侧菜单栏,你需要从导航到 com > canonical > indicator > sound.下面的面板将会出现。

双击“interested-media-players”旁的闭括号,并删除你希望从声音菜单里移除掉的播放器,但需要保留方括号中,且不要删除任何需要保留的逗号或者单引号。

举个例子,我移除掉这些

rhythmbox.desktop’, ‘pithos.desktop’, ‘clementine.desktop’,

这样就好留了一行如下:

['tomahawk.desktop']

现在,当我再打开声音菜单时,我只看到Tomahawk:

第二部分:黑名单

等等!还不能关闭dconf-editor。尽管上面的步骤看起来把事情处理得干净利落,但是一些播放器在打开时会立即重新加载到声音菜单。为了避免重复这个过程,将它们添加到blacklisted-media-player中。

记得每个在括号里的播放器都用逗号分隔多个条目。他们也必须在方括号内,所以在退出之前请务必仔细检查。

最终结果如下:


via: http://www.omgubuntu.co.uk/2014/11/remove-players-ubuntu-sound-menu

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

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

闭门造车是产生不了创新的。

据华尔街日报称,有消息表明,Zulily正在开发更多的内部软件,但实际上根本不是。多年前Eric Raymond写道,全世界95%的软件写来用的,而不是售卖。原因很多,但是其中有一个比较突出:正如Zulily的CIO Luke Friang所说,几乎没有一个[非定制]软件解决方案能跟上我们的步伐。

20年前是这样,现在也是这样。

但是有一点是不同的,这也正是华尔街日报完全忽略的地方。而这也正是历史上开发的内部软件始终保持着专有的原因了,因为它是一个公司的核心竞争力。然而今天,越来越多的公司意识到另一面:开源内部软件将会比保持专有获益更多。

这也就是为什么你的公司需要为开源项目做出更多的贡献。记住是更多。

不寻常的那些年

我们刚刚经历了一个很不一样的20年,那时很多软件的开发都是为了内部的使用,大多数人的精力都放在由SAP和微软这样的厂商建立的应用广泛的企业级解决方案。

不管怎么说,这都是一个理论。

在实践中,买方花费很少的钱购买license,然后至少付出5倍以上的代价来使软件符合他们的需求。比如说,一个公司可能在一个ERP系统上花费 100,000美元,但是他们还得继续花费500,000来维持软件正常运行。

开源软件甚至是应用程序正式发展起来的原因之一是很多公司可以免费获得一些功能性的产品(或者是以一个相对便宜的费用获得产品), 然后定制为他们所需要的。不管怎样,定制是有必要的,而且开源的根本是使成本更低,或许,这样的定制或许能产生更好的结果。

同时,开发者尽量的减少同类之间的相似之处。作为Redmonk分析师,Stephen O'Grady认为:

从最近几年看,主流技术产业都有意避开专业化。运行在定制操作系统上的虚拟设备,已经彻底败给了RHEL和Windowns这些通用的操作系统。 最快20年,任何程序的数据保存都意味着一件事:一个关联的数据库,如果你要做的是企业级应用开发,那么你首先要接触的是Java,等等。

然而,开源的道路上,一些公司也发现,有些销售商不能很好地描述他们所想要的,即便是很好理解的产品类别,如像内容管理系统,他们需要 知道的是产品亮点,而不希望是一个模子刻出来的。

所以顾客没了,他们中有一部分转变成了供应商。

自己动手,丰衣足食

这也是常有的事,O'Grady指出了这一点。2010年,O'Grady发现了一个有趣的现象:“软件提供商正面对着一个强有力的市场竞争者:他们的顾客。”

回想一下今天的高科技,大多数都是开源的,几乎所有的项目一开始都是某些公司的内部项目,或者仅仅是有些开发者的爱好,Linux,Git,Hadoop,Cassandra,MongDB,Android,等等。没有一个项目起初是为了售卖而产生的。

相反,这些项目通常是由一些公司维护,他们使用开源的资源来构建软件并完善软件,这主要是一些Web公司。不像以前银行,医院和一些组织开发的软件只供内部使用,他们开源源码。

虽然,有些公司避免定制软件,因为他们不想自己维护它,开源(稍微)减轻了这些发展中公司来维护一个项目的压力。从而为项目发起人均摊项目的开发成本,Yahoo,建立了 Hadoop,但是现在最大的贡献者是Cloudera和Hortonworks。Facebook 建立了 Cassandra,但是现在主要是靠DataStax在维护。等等。

现在就走出来吧!

今天,真正的软件创新并不是闭门造车能造出来的,即便是可以,它也不会在那儿,开源项目颠覆了几十年的软件开发传统。

这不仅仅是一个人的一点点力量。

最好的开源项目都发展得很快,但是这并不意味着别人在乎你的开源代码。开放你的源码有显著的优缺点,其中一个很重要的优点是很多伟大的开发者都希望为开源做出贡献:如果你也想找一个伟大的开发者跟你一起,你需要给他们一个开放的源代码来让他们工作。(Netflix说)

但是,我们没有理由站在一边看,现在正是时候参与开源社区了,而不是把“社区”妖魔化。是的,开源最大的参与者正是你们和你们的公司。 赶紧开始吧。

主要图片来自于Shutterstock. (注:Shutterstock是美国的一家摄影图片网站。)


via: http://readwrite.com/2014/08/16/open-source-software-business-zulily-erp-wall-street-journal

作者:Matt Asay 译者:barney-ro 校对:wxy

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