分类 技术 下的文章

Neofetch 是一个跨平台的易于使用的 系统信息显示命令行脚本,它收集你的系统信息,并在终端中和图像一起显示出来,这个图像可能是你的发行版的 logo 也可能是你选择的一幅 ascii 艺术字。

Neofetch 和 ScreenFetch 或者 Linux\_Logo 很像,但是它可以高度定制,并且还有一些额外的我们要在下面讨论的特点。

它的主要特点有:运行速度快,可以显示全色图像 —— 用 ASCII 字符显示的发行版 logo ,旁边显示系统信息,可以高度定制,可以随时随地显示系统信息,并且在脚本结束的时候还可以通过一个特殊的参数来启用桌面截图。

系统要求:

  1. Bash 3.0+ 带 ncurses 支持。
  2. w3m-img (有时候会打包成 w3m) 或者 iTerm2 或者 Terminology,用于显示图像。
  3. imagemagick,用于创建缩略图。
  4. 支持 [\033[14tLinux 终端模拟器 或者 xdotool 或者 xwininfo + xprop 或者 xwininfo + xdpyinfo 。
  5. Linux 系统中还需要 feh、nitrogen 或者 gsettings 来提供对墙纸的支持。

注意:你可以从 Neofetch 的 Github 页面了解更多关于可选依赖的信息,以检查你的 Linux 终端模拟器 是不是真的支持 \033[14t 或者是否需要一些额外的依赖来使这个脚本在你的发行版上工作得更好。

怎样在 Linux 系统上安装 Neofetch

Neofetch 可以从几乎所有 Linux 发行版的第三方仓库轻松安装,请按照以下各自的安装说明进行安装。

Debian

$ echo "deb http://dl.bintray.com/dawidd6/neofetch jessie main" | sudo tee -a /etc/apt/sources.list
$ curl -L "https://bintray.com/user/downloadSubjectPublicKey?username=bintray" -o Release-neofetch.key && sudo apt-key add Release-neofetch.key && rm Release-neofetch.key
$ sudo apt-get update
$ sudo apt-get install neofetch

Ubuntu 和 Linux Mint

$ sudo add-apt-repository ppa:dawidd0811/neofetch
$ sudo apt-get update
$ sudo apt-get install neofetch

RHEL, CentOS 和 Fedora

你的系统里面要安装了 dnf-plugins-core ,或者用以下命令安装它:

$ sudo yum install dnf-plugins-core

启用 COPR 仓库然后安装 neofetch。

$ sudo dnf copr enable konimex/neofetch
$ sudo dnf install neofetch

Arch Linux

你可以用 packer 或 Yaourt 从 AUR 安装 neofetch 或 neofetch-git。

$ packer -S neofetch
$ packer -S neofetch-git
或
$ yaourt -S neofetch
$ yaourt -S neofetch-git

Gentoo

从 Gentoo/Funtoo 的官方源安装 app-misc/neofetch。如果你要安装这个程序的 git 版的话,你可以安装 app-misc/neofetch-9999。

怎么在 Linux 中使用 Neofetch

一旦你安装了 Neofetch ,使用它的一般语法是:

$ neofetch

注意: 要是你没有安装 w3m-img 或者 imagemagick 的话,screenfetch 会默认被启用,neofetch 会如下图所示显示你的 [ASCII 艺术 logo]。

Linux Mint 系统信息

Linux Mint 系统信息

Linux Mint 系统信息

Ubuntu 系统信息

Ubuntu System Information

Ubuntu 系统信息

如果你想用图片显示你的发行版 logo,需要用下面的命令安装 w3m-img 或者 imagemagick 。

$ sudo apt-get install w3m-img    [On Debian/Ubuntu/Mint]
$ sudo yum install w3m-img        [On RHEL/CentOS/Fedora]

然后再次运行 neofetch,你就会看到如下图所示的用你系统的默认墙纸来显示图片。

$ neofetch

Ubuntu System Information with Logo

Ubuntu 系统信息带 logo

第一次运行 neofetch 后,它会在这里创建一个配置文件: $HOME/.config/neofetch/config

这个配置文件可以让你通过 printinfo () 函数来调整你想显示在终端的系统信息。你可以增加,修改,删除,也可以使用 bash 代码去调整你要显示的信息。

你可以如下图所示用你喜欢的编辑器打开这个配置文件:

$ vi ~/.config/neofetch/config

以下是我系统配置的片段 ,显示了 printinfo () 函数。

Neofetch 配置

#!/usr/bin/env bash
# vim:fdm=marker
#
# Neofetch config file
# https://github.com/dylanaraps/neofetch

# Speed up script by not using unicode
export LC_ALL=C
export LANG=C

# Info Options {{{

# Info
# See this wiki page for more info:
# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
printinfo() {
    info title
    info underline

    info "Model" model
    info "OS" distro
    info "Kernel" kernel
    info "Uptime" uptime
    info "Packages" packages
    info "Shell" shell
    info "Resolution" resolution
    info "DE" de
    info "WM" wm
    info "WM Theme" wmtheme
    info "Theme" theme
    info "Icons" icons
    info "Terminal" term
    info "Terminal Font" termfont
    info "CPU" cpu
    info "GPU" gpu
    info "Memory" memory

    # info "CPU Usage" cpu_usage
    # info "Disk" disk
    # info "Battery" battery
    # info "Font" font
    # info "Song" song
    # info "Local IP" localip
    # info "Public IP" publicip
    # info "Users" users
    # info "Birthday" birthday

    info linebreak
    info cols
    info linebreak
}
.....

下面的命令可以显示所有你能在 neofetch 脚本中用的参数和配置值:

$ neofetch --help

要启用所有的功能和参数来运行程序,你可以用 --test 参数:

$ neofetch --test

要再次显示 ASCII 艺术 logo ,你可以用 --ascii 参数 :

$ neofetch --ascii

这篇文章中,我们向你介绍了一个可以高度定制的、用来收集系统信息并将它显示在终端上的命令行脚本。

如果你有什么问题,或者对这个脚本有什么想法,请在下面留言。

最后但是同样重要的是,如果你知道有类似的脚本,请毫不犹豫地告诉我们,感谢反馈。

在此访问 neofetch Github 仓库


via: http://www.tecmint.com/neofetch-shows-linux-system-information-with-logo

作者:Aaron Kili 译者:Yinux 校对:wxy

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

简介

Xubuntu 一直是我最喜欢的发行版之一。与其它的 Linux 发行版相比,它的外观看起来不那么迷人,它当然也不会把你需要的软件全部预装上。

Xubuntu 能够给你的就是一个良好的起点。

如果你是那种喜欢定制桌面和外观的人,那么 XFCE 绝对是适合于这种的最好的桌面环境。如果你的系统资源不足,或想让桌面漂亮舒服, XFCE 还是一个很棒的选择。

Xubuntu 之所以成领先于其它 Linux 发行版,就是因为它默认安装 XFCE 桌面。

毫无疑问,在硬件兼容性、易用性、稳定性、易于安装,以及拥有一个大型社区等方面,Ubuntu 是很难被超越的。Xubuntu 是 Ubuntu Linux 发行版的官方流派,因此你可以拥有所有 Ubuntu 的优点,除了用 XFCE 桌面代替 Unity 桌面。

你可以选择性的安装应用到你的发行版上,而不是像其它发行版那样预装了一堆你不需要的应用。Xubuntu 只附带了一些必须的应用,在这么小的核心之外的应用要靠你自己去找并安装。

对我来说,以上就是我为什么认为 Xubuntu 是最棒的发行版的原因。从简单的基本安装开始,然后按照你要的去定制就好了。

如何获得 Xubuntu

你可以访问 Xubuntu 的官网:http://xubuntu.org/

你可以在这里 http://xubuntu.org/getxubuntu/ 找到下载页。

它有两个版本,大多数人会选择长期支持版本(LTS),除非你希望每六个月更新一次系统。而另一个版本是我今天要讲的,它就是 16.10 版。

你既可以选择一个种子文件来下载 ISO,也可以访问它的镜像源下载。

如果你选择在镜像源中下载,你需要点击合适的 ISO 文件。比如 64 位的选择 amd-64.iso 文件,而 32 位的选择 i386.iso。

有很多教程,可以教你怎么创建一个 Linux 启动 U 盘:

如果这些你都觉得太复杂,你可以 从这买一个

安装

像 Ubuntu 其它版本一样,安装 Xubuntu 相当直白。如果你曾经装过一个版本,那么基本上你可以安装任何一个版本。

开始时选择你的安装语言。

你会被问到,是否需要同时安装更新,是否要安装第三方软件,包括播放音乐的软件和专有驱动。想要完成这些,你需要联网。

再次,这也很直白,我们会在之后再次涉及到这些。

如果你有一个备用的未分配的磁盘分区和并且安装了 Windows,您将看到可以选择在已有 Windows 的情况下安装 Xubuntu 并设置双启动。

您也可以选择安装 Xubuntu 作为唯一的操作系统,还可以选择别的任何你喜欢的分区来安装。

下一步是设置你所在的区域以确定你的时区。

接下来两步是选择语言和键盘设置,以确定键盘模式。

最后创建一个默认账户,输入你的名字、你计算机的名字、设置用户名和密码。

Xubuntu 将会被安装在你的电脑上了,你可以继续往下看了。

第一印象

Xubuntu 的初始界面只有一个面板位于蓝色桌面的顶部。通过桌面上的图标,你可以看到所有可用的驱动器。

画面的顶部是个简单的面板。

面板的左侧角落有一个单独的图标(老鼠的样子),点击它后会出现一个时尚而轻量,但功能全面的菜单,它被称为 Whisker(胡须)菜单。

在右上角有着通知、电源、蓝牙、网络、音量和时钟的图标。

连接互联网

你可以通过点击面板上的网络图标来连接互联网。一个无线网络的列表将会出现,你可以选择一个点击,并键入密码,就可以连接了。

我是在我的联想 Ideapad Y700 上安装 Xubuntu 的,这个本子很现代,其上运行的许多发行版在无线网络连接时会有些小问题,我不得不找些规避问题的方法。

但 Xubuntu 16.10 工作的很好,不需要做任何修改。

驱动

为你的电脑寻找可用的附加驱动是十分必要的。

虽然默认的开源驱动是基本够用的,但是如果你有着较好的显卡,并且想获得更好的图形体验,那就十分有必要去寻找专有驱动。

打开菜单,搜索附加驱动,你可以找到附加驱动设置界面。

如果看到你的显卡驱动,但是它不工作,那么我还是建议你用默认的显卡驱动。

打印

我有一个爱普生 WF-2630 无线打印机。 Xubuntu 能够直接找到这台打印机,并安装相关驱动。

我打印了测试页,发现它的输出非常合适。

网络存储

我有一个跨无线网络连接的 WD MyCloud 存储设备。

可以通过默认的文件管理器 Thunar 来访问这个设备。值得注意的是,我在网络设备中找到了 WD MyCloud 设备,但是点击它时显示错误。

但是我打开 Windows 网络文件夹时,WD MyCloud 也显示出来了,而且我也能正常访问该设备上的文件夹。

软件

我在文章开始时提到了,Xubuntu 配备了最少的应用集,不过它包含了你开始所需要的所有应用。

火狐浏览器是它的默认浏览器,Thunderbird 是默认的邮件客户端。

你也有一个全套的 LibreOffice 套件和 Parole 媒体播放器。

它也有一系列工具,比如图片查看器、计算器、光盘刻录工具,还有一个 BT 下载器。

我很高兴,现在在大多数发行版上,Abiword 和 Gnumeric 都被忽略掉了,因为它们实在无关紧要。大多数人们最终会安装 Libreoffice 的。

缺乏专门的音频播放器这点比较奇怪。另外我需要提到的是我通常最终会安装谷歌的 Chrome 浏览器,而不是使用Firefox。

本节的第一个图片说明了原因。这张图片里,我试图观看 Google Play 商店的 “Curb Your Enthusiam” 视频,可惜的是各种 DRM 和其它一些问题导致了视频无法播放。

从谷歌网站上一个简单的下载就可以解决问题。如下所示。

安装软件

在 Ubuntu 16.04 以后的发行版上普遍存在的一个主要问题是有些程序无法在图形安装软件中安装。

比如在软件管理器中找不到 Steam。

如果你使用命令行输入 sudo apt-cache search steam 你会发现有这个软件。

并不是只有 Steam 被遗漏了,其它软件比如 Skype 同样不能在图形软件管理工具中找到。

我真希望这个问题已经在所有 Ubuntu 发行版中解决了。

我最近还试用了 Kubuntu 16.04 ,发现它的叫做 Discover 的软件工具完全无用,搜索根本不工作。

幸运的是,Xubuntu 上的软件管理器可以安装大多数软件包,我利用它搜寻并装上了 Quod Libet 音乐播放器。

顺便说一下,如果你在安装 Xubuntu 时选择了同时安装解码器,那么 MP3 播放也不会出现任何问题。

如果没有安装,那么你需要打开终端模拟器,安装 Xubuntu Restricted Extras 包。

个性化 Xubuntu

在这方面你可以做很多事来定制 Xubuntu, 参见这里

Xubuntu 提供一整套漂亮的壁纸,如上图所示,你要做的第一件事就是选一个好看的壁纸并添加一个 Dock 风格的面板,里面含所有你喜欢的软件的启动器。

Xubuntu 有一个相对较新的特性就是 XFDashboard 。它带来了与 Gnome 桌面类似的 Dash 面板。你可以在上面添加启动器和能够让应用快速启动的键盘快捷键。

此图展示了一个快速选择不同工作区和启动应用的好方法。

说老实话,当谈到个性化 Xubuntu 时,有一种世界尽在我掌中的感觉。

问题

我在使用 Xubuntu (包括所有基于 Ubuntu 的发行版)时感受到的最大问题就是应用商店里面找不到一些重要的应用。为啥没有 Steam ?

在 Xubuntu 安装时收到一个崩溃的错误,如下图所示。

我没有搞明白这个问题是怎么回事,因为它没有带来任何副作用。安装工作也没有出岔子。

总结

我不对 Xubuntu 点评更多,并不是因为我不喜欢它。事实上我是 Xubuntu 的大粉丝,并且我在另一个电脑上有一个它的深度定制版。

我使用电脑时,我希望了解发生了什么,没有比看到下面这种情况更让人恼火的了。

认真的说,为啥会有人认为 windows 适合工作?似乎每隔一就会看到消息 “正在安装(1/285)” ,于是当它自己更新时,你就失去了一个小时。而 Xubuntu(和其它发行版一样)更新不会打断你每天的工作。

事实是,Xubuntu 真的没有什么需要改变的,它可靠、稳定、不需要改变什么(除了软件管理器)。

我非常推荐 Xubuntu。

此外,我还得说去试一试 Peppermint OS、Linux Mint XFCE 或者 Manjaro XFCE 也是十分值得的。


via: http://www.everydaylinuxuser.com/2016/10/an-everyday-linux-user-review-of_15.html

作者:Gary Newell 译者:chao-zhi 校对:jasminepeng

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

如果你是一个在企业环境中维护关键性系统的系统管理员,你肯定对以下两件事深有感触:

1) 很难找个停机时间去给系统安装安全补丁以修复内核或者系统漏洞 。如果你工作的公司或者企业没有适当的安全策略,运营管理可能最终会优先保证系统的运行而不是解决系统漏洞。 此外,内部的官僚作风也可能延迟批准停机时间。我当时就是这样的。

2) 有时候你确实负担不起停机造成的损失,并且还要做好用别的什么方法减小恶意攻击带来的的风险的准备。

好消息是 Canonical 公司最近针对 Ubuntu 16.04 (64位版本 / 4.4.x 内核) 发布了 Livepatch 服务,它可以让你不用重启就能给内核打关键性安全补丁。 对,你没看错:使用 Livepatch 你不用重启就能使 Ubuntu 16.04 服务器系统的安全补丁生效。

注册 Ubuntu Livepatch 账号

要运行 Canonical Livepatch 服务你先要在这里注册一个账号 https://auth.livepatch.canonical.com/,并且表明你是一个普通用户还是企业用户(付费)。 通过使用令牌,所有的 Ubuntu 用户都能将最多 3 台不同的电脑连接到 Livepatch 服务:

Canonical Livepatch Service

Canonical Livepatch 服务

下一步系统会提示你输入你的 Ubuntu One 凭据,或者你也可以注册一个新账号。如果你选择后者,则需要你确认你的邮件地址才能完成注册:

Ubuntu One Confirmation Mail

Ubuntu One 确认邮件

一旦你点了上面的链接确认了你的邮件地址,你就会回到这个界面:https://auth.livepatch.canonical.com/ 并获取你的 Livepatch 令牌。

获取并使用 Livepatch 令牌

首先把分配给你账号的这个唯一的令牌复制下来:

Canonical Livepatch Token

Canonical Livepatch 令牌

然后打开终端,输入:

$ sudo snap install canonical-livepatch

上面的命令会安装 livepatch 程序,下面的命令会为你的系统启用它。

$ sudo canonical-livepatch enable [YOUR TOKEN HERE]

如果后一条的命令提示找不到 canonical-livepatch ,检查一下 /snap/bin 是否已经添加到你的路径, 或者把你的工作目录切换到 /snap/bin 下执行也行。

$ sudo ./canonical-livepatch enable [YOUR TOKEN HERE]

Install Livepatch in Ubuntu

在 Ubuntu 中安装 Livepatch

之后,你可能需要检查应用于内核的补丁的描述和状态。幸运的是,这很简单。

$ sudo ./canonical-livepatch status --verbose

如下图所示:

Check Livepatch Status in Ubuntu

检查补丁安装情况

在你的 Ubuntu 服务器上启用了 Livepatch,你就可以在保证系统安全的同时把计划内的外的停机时间降到最低。希望 Canonical 的这个举措会在管理上给你带来便利,甚至更近一步带来提升。

如果你对这篇文章有什么疑问,欢迎在下面留言,我们会尽快回复。


via: http://www.tecmint.com/livepatch-install-critical-security-patches-to-ubuntu-kernel

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

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

巨头之间的终极对决:崛起的新星 Node.js 能否战胜巨人 Apache 和 Nginx?

我和你一样,都阅读过大量散布在互联网各处的意见或事实,其中有一些我认为是可靠的,而其它的可能是谣传,让人难以置信。

我读过的许多信息是相当矛盾的,有人深信 StackOverflow(比如这个另一个),而其他人展示了一个清晰的令人惊讶的结果,这在推动我自己去做测试来验证结论的过程中扮演了重要的角色。

起初,我做了一些思想准备,我认为我可以避免自己进行实际测试来校验结论的麻烦——在我知道这一切之前我一直这样认为。

尽管如此,回顾之前,似乎我最初的想法是相当准确的,并且被我的测试再次印证。这个事实让我想起了当年我在学校学到的爱因斯坦和他的光电效应的实验,他面临着一个光的波粒二重性的问题,最初的结论是实验受到他的心理状态的影响,即当他期望结果是一个波的时候结果就会是一个波,反之亦然。

也就是说,我坚信我的结果不会在不久的将来被证明二重性,虽然我的心理状态可能在某种程度上对它们有影响。

关于比较

上面我读过一份材料具有一种革新的方式,在我看来,需要了解其自然而然的主观性和作者自身的偏见。

我决定采用这种方式,因此,提前声明以下内容:

开发者花了很多年来打磨他们的作品。那些取得了更高成就的人通常参考很多因素来做出自己的抉择,这是主观的做法;你需要推崇和捍卫你的技术决策。

也就是说,这个比较文章的着眼点不会成为另一篇“哥们,使用适合你的东西就好”的口水文章。我将会根据我的自身经验、需求和偏见提出建议。你可能会同意其中一些观点,反对另外一些;这很好——你的意见会帮助别人做出明智的选择。

感谢 SitePoint 的 Craig Buckler ,重新启发了我对比较类文章的看法——尝试重新忘记自我,并试图让所有的读者心悦诚服。

关于测试

所有的测试都在本地运行:

  • 英特尔酷睿 i7-2600k,四核八线程的机器
  • Gentoo Linux 是用于测试的操作系统

用于基准测试的工具:ApacheBench,2.3 <$Revision: 1748469 $>

测试包括一系列基准,从 1000 到 10000 个请求以及从 100 到 1000 个的并发请求——结果相当令人惊讶。

此外,我还进行了在高负载下测量服务器功能的压力测试。

至于内容,主要是一个包含一些 Lorem Ipsum 的标题和一张图片静态文件。

Lorem Ipsum 和 ApacheBenchmark

我决定专注于静态文件的原因是因为它们去除了可能对测试产生影响的各种渲染因素,例如:编程语言解释器的速度、解释器与服务器的集成程度等等。

此外,基于我自身的经验,平均网页加载时间很大一部分通常花费在静态内容上,例如图片,因此关注哪个服务器可以节省我们加载静态内容的时间是比较现实的。

除此之外,我还想测试一个更加真实的案例,案例中我在运行不同 CMS 的动态页面(稍后将详细介绍)时对服务器进行基准测试。

服务器

正如我用的是 Gentoo Linux,你就知道我的 HTTP 服务器在一开始就已经经过优化了,因为我在构建系统的时候只使用了我实际需要的东西。也就是说,当我运行我的测试的时候,不会在后台运行任何不必要的代码或加载没用的模块。

Apache、Nginx 和 Node.js 的使用的配置对比

Apache

$: curl -i http://localhost/index.html

HTTP/1.1 200 OK
Date: Sun, 30 Oct 2016 15:35:44 GMT
Server: Apache
Last-Modified: Sun, 30 Oct 2016 14:13:36 GMT
ETag: "2cf2-54015b280046d"
Accept-Ranges: bytes
Content-Length: 11506
Cache-Control: max-age=600
Expires: Sun, 30 Oct 2016 15:45:44 GMT
Vary: Accept-Encoding
Content-Type: text/html

Apache 配置了 “event mpm”。

Nginx

$: curl -i http://localhost/index.html

HTTP/1.1 200 OK
Server: nginx/1.10.1
Date: Sun, 30 Oct 2016 14:17:30 GMT
Content-Type: text/html
Content-Length: 11506
Last-Modified: Sun, 30 Oct 2016 14:13:36 GMT
Connection: keep-alive
Keep-Alive: timeout=20
ETag: "58160010-2cf2"
Accept-Ranges: bytes

Nginx 包括几个调整:sendfile ontcp_nopush ontcp_nodelay on

Node.js

$: curl -i http://127.0.0.1:8080

HTTP/1.1 200 OK
Content-Length: 11506
Etag: 15
Last-Modified: Thu, 27 Oct 2016 14:09:58 GMT
Content-Type: text/html
Date: Sun, 30 Oct 2016 16:39:47 GMT
Connection: keep-alive

在静态测试中使用的 Node.js 服务器是从头定制的,这样可以让它尽可能更加的轻快——没有使用外部模块(Node 核心模块除外)。

测试结果

点击图片以放大:

Apache、Nginx 与 Node 的对比:请求负载的性能(每 100 位并发用户)

Apache、Nginx 与 Node 的对比:用户负载能力(每 1000 个请求)

压力测试

Apache、Nginx 与 Node 的对比:完成 1000 位用户并发的 100000 个请求耗时

我们可以从结果中得到什么?

从以上结果判断,似乎 Nginx 可以在最少的时间内完成最多请求,换句话来说,Nginx 是最快的 HTTP 服务器。

还有一个相当惊人的事实是,在特定的用户并发数和请求数下,Node.js 可以比 Nginx 和 Apache 更快。

但当请求的数量在并发测试中增加的时候,Nginx 将重回领先的位置,这个结果可以让那些陷入 Node.js 的遐想的人清醒一下。

和 Apache、Nginx 不同的是,Node.js 似乎对用户的并发数不太敏感,尤其是在集群节点。如图所示,集群节点在 0.1 秒左右保持一条直线,而 Apache 和 Nginx 都有大约 0.2 秒的波动。

基于上述统计可以得出的结论是:网站比较小,其使用的服务器就无所谓。然而,随着网站的受众越来越多,HTTP 服务器的影响变得愈加明显。

当涉及到每台服务器的原始速度的底线的时候,正如压力测试所描述的,我的感觉是,性能背后最关键的因素不是一些特定的算法,而实际上是运行的每台服务器所用的编程语言。

由于 Apache 和 Nginx 都使用了 C 语言—— AOT 语言(编译型语言),而 Node.js 使用了 JavaScript ——这是一种 JIT 语言(解释型语言)。这意味着 Node.js 在执行程序的过程中还有额外的工作负担。

这意味着我不能仅仅基于上面的结果来下结论,而要做进一步校验,正如你下面看到的结果,当我使用一台经过优化的 Node.js 服务器与流行的 Express 框架时,我得到几乎相同的性能结论。

全面考虑

逝者如斯夫,如果没有服务的内容,HTTP 服务器是没什么用的。因此,在比较 web 服务器的时候,我们必须考虑的一个重要的部分就是我们希望在上面运行的内容。

虽然也有其它的功能,但是 HTTP 服务器最广泛的使用就是运行网站。因此,为了看到每台服务器的性能的实际效果,我决定比较一下世界上使用最广泛的 CMS(内容管理系统)WordPress 和 Ghost —— 内核使用了 JavaScript 的一颗冉冉升起的明星。

基于 JavaScript 的 Ghost 网页能否胜过运行在 PHP 和 Apache / Nginx 上面的 WordPress 页面?

这是一个有趣的问题,因为 Ghost 具有操作工具单一且一致的优点——无需额外的封装,而 WordPress 需要依赖 Apache / Nginx 和 PHP 之间的集成,这可能会导致显著的性能缺陷。

除此之外,PHP 距 Node.js 之间还有一个显著的性能落差,后者更佳,我将在下面简要介绍一下,可能会出现一些与初衷大相径庭的结果。

PHP 与 Node.js 的对决

为了比较 WordPress 和 Ghost,我们必须首先考虑一个影响到两者的基本组件。

基本上,WordPress 是一个基于 PHP 的 CMS,而 Ghost 是基于 Node.js(JavaScript)的。与 PHP 不同,Node.js 有以下优点:

  • 非阻塞的 I/O
  • 事件驱动
  • 更新颖、更少的残旧代码

由于有大量的测评文章解释和演示了 Node.js 的原始速度超过 PHP(包括 PHP 7),我不会再进一步阐述这个主题,请你自行用谷歌搜索相关内容。

因此,考虑到 Node.js 的性能优于 PHP,一个 Node.js 的网站的速度要比 Apache / Nginx 和 PHP 的网站快吗?

WordPress 和 Ghost 对决

当比较 WordPress 和 Ghost 时,有些人会说这就像比较苹果和橘子,大多数情况下我同意这个观点,因为 WordPress 是一个完全成熟的 CMS,而 Ghost 基本上只是一个博客平台。

然而,两者仍然有共同竞争的市场,这两者都可以用于向世界发布你的个人文章。

制定一个前提,我们怎么比较两个完全基于不同的代码来运行的平台,包括风格主题和核心功能。

事实上,一个科学的实验测试条件是很难设计的。然而,在这个测试中我对更接近生活的情景更感兴趣,所以 WordPress 和 Ghost 都将保留其主题。因此,这里的目标是使两个平台的网页大小尽可能相似,让 PHP 和 Node.js 在幕后斗智斗勇。

由于结果是根据不同的标准进行测量的,最重要的是尺度不一样,因此在图表中并排显示它们是不公平的。因此,我改为使用表:

Node、Nginx、Apache 以及运行 WordPress 和 Ghost 的比较。前两行是 WordPress,底部的两行是 Ghost

正如你所见,尽管事实上 Ghost(Node.js)正在加载一个更小的页面(你可能会惊讶 1kb 可以产生这么大的差异),它仍然比同时使用 Nginx 和 Apache 的 WordPress 要慢。

此外,使用 Nginx 代理作为负载均衡器来接管每个 Node 服务器的请求实际上会提升还是降低性能?

那么,根据上面的表格,如果说它产生什么效果的话,它造成了更慢的效果——这是一个合理的结果,因为额外封装一层理所当然会使其变得更慢。当然,上面的数字也表明这点差异可以忽略不计。

但是上表中最重要的一点是,即使 Node.js 比 PHP 快,HTTP 服务器的作用也可能超过某个 web 平台使用的编程语言的重要性。

当然,另一方面,如果加载的页面更多地依赖于服务器端的脚本处理,那么我怀疑结果可能会有点不同。

最后,如果一个 web 平台真的想在这场竞赛里击败 WordPress,从这个比较中得出的结论就是,要想性能占优,必须要定制一些像 PHP-FPM 的工具,它将直接与 JavaScript 通信(而不是作为服务器来运行),因此它可以完全发挥 JavaScript 的力量来达到更好的性能。


via: https://iwf1.com/apache-vs-nginx-vs-node-js-and-what-it-means-about-the-performance-of-wordpress-vs-ghost/

作者:Liron 译者:OneNewLife 校对:wxy

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

(题图来自:deviantart.net

通过这系列的前六篇文章,我们已经学会使用 Git 来对文本文件进行版本控制的管理。我们不禁要问,还有二进制文件呢,也可进行进行版本控制吗?答案是肯定的,Git 已经有了可以处理像多媒体文件这样的二进制大对象块(blob)的扩展。因此,今天我们会学习使用 Git 来管理所谓的二进制资产。

似乎大家都认可的事就是 Git 对于大的二进制对象文件支持得不好。要记住,二进制大对象与大文本文件是不同的。虽然 Git 对大型的文本文件版本控制毫无问题,但是对于不透明的二进制文件起不了多大作用,只能把它当作一个大的实体黑盒来提交。

设想这样的场景,有一个另人兴奋的第一人称解密游戏,您正在为它制作复杂的 3D 建模,源文件是以二进制格式保存的,最后生成一个 1GB 大小的的文件。您提交过一次,在 Git 源仓库历史中有一个 1GB 大小的新增提交。随后,您修改了下模型人物的头发造型,然后提交更新,因为 Git 并不能把头发从头部及模型中其余的部分离开来,所以您只能又提交 1GB 的量。接着,您改变了模型的眼睛颜色,提交这部分更新:又是 GB 级的提交量。对一个模型的一些微小修改,就会导致三个 GB 级的提交量。对于想对一个游戏所有资源进行版本控制这样的规模,这是个严重的问题。

不同的是如 .obj 这种格式的文本文件,和其它类型文件一样,都是一个提交就存储所有更新修改状态,不同的是 .obj 文件是一系列描述模型的纯文本行。如果您修改了该模型并保存回 .obj 文件,Git 可以逐行读取这两个文件,然后创建一个差异版本,得到一个相当小的提交。模型越精细,提交就越小,这就是标准的 Git 用例。虽然文件本身很大,但 Git 使用覆盖或稀疏存储的方法来构建当前数据使用状态的完整描述。

然而,不是所有的都是纯文本的,但都要使用 Git,所以需要解决方案,并且已经出现几个了。

OSTree 开始是作为 GNOME 项目出现的,旨在管理操作系统的二进制文件。它不适用于这里,所以我直接跳过。

Git 大文件存储(LFS) 是放在 GitHub 上的一个开源项目,是从 git-media 项目中分支出来的。git-mediagit-annex 是 Git 用于管理大文件的扩展。它们是对同一问题的两种不同的解决方案,各有优点。虽然它们都不是官方的项目,但在我看来,每个都有独到之处:

  • git-media 是集中模式,有一个公共资产的存储库。你可以告诉 git-media 大文件需要存储的位置,是在硬盘、服务器还是在云存储服务器,项目中的每个用户都将该位置视为大型文件的中心主存储位置。
  • git-annex 侧重于分布模式。用户各自创建存储库,每个存储库都有一个存储大文件的本地目录 .git/annex。这些 annex 会定期同步,只要有需要,每个用户都可以访问到所有的资源。除非通过 annex-cost 特别配置,否则 git-annex 优先使用本地存储,再使用外部存储。

对于这些,我已经在生产中使用了 git-media 和 git-annex,那么下面会向你们概述其工作原理。

git-media

git-media 是使用 Ruby 语言开发的,所以首先要安装 gem(LCTT 译注:Gem 是基于 Ruby 的一些开发工具包)。安装说明在其网站上。想使用 git-meida 的用户都需要安装它,因为 gem 是跨平台的工具,所以在各平台都适用。

安装完 git-media 后,你需要设置一些 Git 的配置选项。在每台机器上只需要配置一次。

$ git config filter.media.clean "git-media filter-clean"
$ git config filter.media.smudge "git-media filter-smudge"

在要使用 git-media 的每个存储库中,设置一个属性以将刚刚创建的过滤器结合到要您分类为“ 媒体 media ”的文件类型里。别被这种术语混淆。一个更好的术语是“资产”,因为“媒体”通常的意思是音频、视频和照片,但您也可以很容易地将 3D 模型,烘焙和纹理等归类为媒体。

例如:

$ echo "*.mp4 filter=media -crlf" >> .gitattributes
$ echo "*.mkv filter=media -crlf" >> .gitattributes
$ echo "*.wav filter=media -crlf" >> .gitattributes
$ echo "*.flac filter=media -crlf" >> .gitattributes
$ echo "*.kra filter=media -crlf" >> .gitattributes

当您要 暂存 stage 这些类型的文件时,文件会被复制到 .git/media 目录。

假设在服务器已经有了一个 Git 源仓库,最后一步就告诉源仓库“母舰”所在的位置,也就是,当媒体文件被推送给所有用户共享时,媒体文件将会存储的位置。这在仓库的 .git/config 文件中设置,请替换成您的用户名、主机和路径:

[git-media]
transport = scp
autodownload = false #默认为 true,拉取资源
scpuser = seth
scphost = example.com
scppath = /opt/jupiter.git

如果您的服务器上 SSH 设置比较复杂,例如使用了非标准端口或非默认 SSH 密钥文件的路径,请使用 .ssh/config 为主机设置默认配置。

git-media 的使用和普通文件一样,可以把普通文件和 blob 文件一样对待,一样进行 commit 操作。操作流程中唯一的不同就是,在某些时候,您应该将您的资产(或称媒体)同步到共享存储库中。

当要为团队发布资产或自己备份资料时,请使用如下命令:

$ git media sync

要用一个变更后的版本替换 git-media 中的文件时(例如,一个已经美声过的音频文件,或者一个已经完成的遮罩绘画,或者一个已经被颜色分级的视频文件),您必须明确的告诉 Git 更新该媒体。这将覆盖 git-media 不会复制远程已经存在的文件的默认设置:

$ git update-index --really-refresh

当您团队的其他成员(或是您本人,在其它机器上)克隆本仓库时,如果没有在 .git/config 中把 autodownload 选项设置为 true 的话,默认是不会下载资源的。但 git-media 的一个同步命令 git media sync 可解决所有问题。

git-annex

git-annex 的处理流程略微的有些不同,默认是使用本地仓库的,但基本的思想都一样。您可以从你的发行版的软件仓库中安装 git-annex,或者根据需要从该网站上下载安装。与 git-media 一样,任何使用 git-annex 的用户都必须在其机器上安装它。

其初始化设置比 git-media 都简单。运行如下命令,其中替换成您的路径,就可以在您的服务器上创建好裸存储库:

$ git init --bare --shared /opt/jupiter.git

然后克隆到本地计算机,把它标记为 git-annex 的初始路径:

$ git clone [email protected]:/opt/jupiter.clone
Cloning into 'jupiter.clone'... 
warning: You appear to have clonedan empty repository. 
Checking connectivity... done.
$ git annex init "seth workstation" 
init seth workstation ok

不要使用过滤器来区分媒体资源或大文件,您可以使用 git annex 命令来配置归类大文件:

$ git annex add bigblobfile.flac
add bigblobfile.flac
(checksum) ok
(Recording state in Git...)

跟普通文件一样进行提交操作:

$ git commit -m 'added flac source for sound fx'

但是推送操作是不同的,因为 git annex 使用自己的分支来跟踪资产。您首次推送可能需要 -u 选项,具体取决于您如何管理您的存储库:

$ git push -u origin master git-annex
To [email protected]:/opt/jupiter.git
* [new branch] master -> master
* [new branch] git-annex -> git-annex

和 git-media 一样,普通的 git push 命令是不会拷贝资料到服务器的,仅仅只是发送了相关的消息,要真正共享文件,需要运行同步命令:

$ git annex sync --content

如果别人已经提交了共享资源,您需要拉取它们,git annex sync 命令将提示您要在本地检出你本机没有,但在服务器上存在的资源。

git-media 和 git-annex 都非常灵活,都可以使用本地存储库来代替服务器,所以它们也常用于管理私有的本地项目。

Git 是一个非常强大和扩展性非常强的系统应用软件,我们应该毫不犹豫的使用它。现在就开始试试吧!


via: https://opensource.com/life/16/8/how-manage-binary-blobs-git-part-7

作者:Seth Kenlon 译者:runningwater 校对:wxy

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

对于初学者来说,在 Linux 系统里你必须掌握的技术之一就是识别出插入系统里的各种设备。这也许是你的系统硬盘、外部的存储设备或者是可移动设备,比如 USB 设备或 SD 闪存卡等。

现如今,使用 USB 设备来传输文件是十分常见的事,对于那些喜欢使用命令行的新手来说,当你需要格式化 USB 设备时,学会使用不同的方法来识别 USB 设备名是非常重要的。

如果在系统中插入一个设备,尤其是在桌面环境下,比如 USB 设备,它会自动挂载到一个指定目录,一般是在 /media/username/device-label 目录下,之后你就可以进入到该目录下访问那些文件了。然而,在服务器上就不是这么回事了,你必须手动挂载这个设备,并且指定一个挂载点。

Linux 系统使用 /dev 目录下特定的设备文件来标识插入的设备。你会发现该目录下的某些文件,包括 /dev/sda 或者 /dev/hda 表示你的第一个主设备,每个分区使用一个数字来表示,比如 /dev/sda1/dev/hda1 表示主设备的第一个分区等等。

$ ls /dev/sda*

List All Linux Device Names

列出 Linux 系统下所有的设备名

现在让我们来使用下面一些特殊的命令行工具找出设备名:

使用 df 命令来找出插入的 USB 设备名

查看插入你系统里的每一个设备及对应的挂载点,你可以使用下图中的 df 命令检查 Linux 系统磁盘空间使用情况:

$ df -h

Find USB Device Name Using df Command

使用 df 命令查找 USB 设备名

使用 lsblk 命令查找 USB 设备名

你也可以使用下面的 lsblk 命令(列出块设备)来列出插入你系统里的所有块设备:

$ lsblk

List Linux Block Devices

列出 Linux 系统里的块设备

使用 fdisk 工具识别 USB 设备名

fdisk 是一个功能强大的工具,用于查看你系统中的所有分区表,包括所有的 USB 设备,使用 root 权限执行如下命令:

$ sudo fdisk -l

List Partition Table of Block Devices

列出块设备的分区表

使用 dmesg 命令来识别出 USB 设备名

dmesg 是一个用于打印或者控制内核环形缓冲区(kernel ring buffer)的重要命令。环形缓冲区是一种数据结构,它存放着内核操作数据的信息

运行如下命令来查看内核操作信息,它同时也会打印出 USB 设备的信息:

$ dmesg

dmesg - Prints USB Device Name

dmesg – 打印 USB 设备名

以上就是这篇文章中提及到的所有命令,我们在命令行下使用不同的方法来找出 USB 设备名。你也可以跟大家分享下实现这个目的的其它方法,或者如果你对这篇文章有什么想法也可以在下面跟大家交流下。


via: http://www.tecmint.com/find-usb-device-name-in-linux

作者:Aaron Kili 译者:rusking 校对:jasminepeng

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