2013年10月

很少有命令行工具可以适应不同的终端尺寸,为用户提供最大限度的信息。绝大多数的工具的显示都是类似的——要么显示的信息混乱了或工具给出一个错误信息。不过, Glances 却是一个支持在80X24终端到任何更大尺寸终端上显示大量系统/网络监控相关信息的工具。

glances-main

提示 -- 这篇文章中的所有例子在Ubuntu 13.04的bash shell上测试过。

简短教程

Glances是一个系统监控工具,它在你的终端上能展示各种各样的系统相关信息。这些信息包括:

  • CPU相关信息
  • 磁盘IO相关信息
  • 内存相关信息
  • 挂载点相关信息
  • 网络接口相关信息
  • 进程相关信息
  • 等等

这是glances示例截图:

glances-1

它是用python写的并且利用psutils库获取所有系统相关信息的显示。Glances在终端上的显示非常灵活,比如,它可以在小至80X24的终端上显示更多的信息。

这是在较小终端上的glances截图:

glances-small-terminal

你可以看到甚至在较小终端上它也能显示一些信息。

你不仅可以用Glances对本地系统监控,它也能用于监控远程系统。在远程系统使用glances,运行以下命令:

glances -s

并且在客户端执行:

glances -c [ip-address-of-server]

在C/S模式中,使用glances有一些用户应该记住的重点[取自glances官方文档]:

在服务器端,你可以用 -B address 和 -p port 来设置绑定的IP地址和端口。在客户端,使用 -p port 来指定连接的服务器端的端口。默认的绑定地址是0.0.0.0(即监听在全部网络接口上)和61209/TCP端口上。

在C/S模式下,限制是在服务器端设置的。你也可以通过 -P password 来指定一个连接口令。Glances 也支持IPv6,可以通过 -B :: 来绑定到全部的IPv6地址上。

此外,这有几个命令行选项可用于自定义信息,像:

  • 使用 -m 禁止显示挂载相关信息
  • 使用 -n 禁止显示网络相关信息
  • 使用 -t 设置屏幕刷新时间间隔
  • 等等

通过man手册页探索和发现更多这样的选项。

除了命令行选项,glances提供许多帮助选项,你可以当glances正在运行的时候使用,这是选项列表:

glances-help

所以你可以看到glances不仅灵活显示也高度可定制。

下载/安装

这是一些与glances工具有关的重要链接:

你可以从软件源下载和安装Glances,但这需要预装python-dev模块。Ubuntu用户可以通过Ubuntu软件中心直接下载和安装。本文使用的版本是1.7.1与PsUtil 0.6.1。

总结

Glances是个工具,可以用于系统管理员快速了解完整的系统概况。在你的宝贝电脑上是个很好的工具,可以在你调试一些系统相关问题上派上用场。显示灵活想必是极好的。

优点

  • 在同等情况下提供许多系统相关信息
  • 灵活的显示

缺点

  • 较小终端时必须指定一些选项,以便显示更多信息。
  • 从源代码构建依赖于附加库,像python-dev。

你曾今用过Glances或类似的工具吗?你的经历是什么?分享你的故事吧。

via: http://mylinuxbook.com/glances-an-all-in-one-system-monitoring-tool/

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

译者:Vito 校对:wxy

以前,我很想要一个用管理员身份打开文件/目录的右键菜单选项(在nautilus文件管理器中)。原因在于,每个需有root权限的操作,我都必须返回命令行终端使用sudo。这并不是说我不习惯命令行,但是我仍希望至少有个能等价于sudo或su的东西。我四处搜索发现一个nautilus插件-- Nautilus-Gksu

NOTE -- 本文中所有的示例已经在Ubuntu 13.04上测试过。

Nautilus-Gksu

gksu-main

简短教程

Nautilus-Gksu插件在右键菜单中添加了一个有用的选项-- 以管理员身份打开(Open as administrator) 。这对nautilus文件管理器中处理文件和目录和有用。

例如,假设你想从nautilus文件管理器中打开root目录。想当然的双击将获取一个错误信息,如:

gksu-1

但是你安装nautilus gksu插件后,你需要做的是在目录上右击并选择“以管理员身份打开(Open as administrator)”选项。

gksu-2

一旦你点击了这个选项,你将被提示输入密码。

gksu-3

只要输入密码就行了。

下载/安装

正如前面提到的,这些天我的大多数文章用Ubuntu 13.04完成,允许我坦白的讲,通过之前推荐的方式安装这个插件很困难。

就是说像这样命令:

sudo apt-get install nautilus-gksu

它不工作且获得以下错误信息:

Reading package lists... Done

Building dependency tree

Reading state information... Done

E: Unable to locate package nautilus-gksu

我google了一下这个问题,发现我不是唯一遇到这个问题的,但是许多其他Ubuntu 13.04用户也面临一个类似的问题。不管怎样,我一直在寻找解决方案,直到我发现一个线索指向该解决方案。我在AskUbuntu上阅读完帖子并尝试在Ubuntu 12.04上提到的步骤。

这是帖子的一个截图:

gksu-4

阅读完上面的帖子,我使用以下步骤来完成安装:

  • 下载64位插件。[我的是64位系统]
  • 解压下载后的deb文件。
  • 执行以下命令(译者注:直接复制插件的.so文件到插件安装目录):
    sudo cp /home/himanshu/Downloads/nautilus-gksu2.0.2-5ubuntu2amd64/usr/lib/nautilus/extensions-2.0/libnautilus-gksu.so /usr/lib/nautilus/extensions-3.0/

这样插件就安装成功了。

总结

如果你的工作涉及到使用Nautilus文件管理器管理你的日常文件,那么这个插件是你的首选。虽然在Ubuntu 13.04上安装它并不容易,但是它仍然值得付出努力。

优点

让你右击使用root权限轻松打开任何文件或目录。

缺点

在Ubuntu 13.04上安装不容易。

via: http://mylinuxbook.com/nautilus-gksu/

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

译者:Vito 校对:wxy

Red Hat与开源项目Docker容器技术开发人员组成合作团队,提供一个虚拟机管理器技术(hypervisors)的替代方案。

Linux发行商Red Hat正与虚拟技术公司dotCloud合作,为Fedora社区Linux项目开发一种新型开源容器技术,名为"Docker"。

当今Linux上的虚拟技术主要包括两类,一类是管理器技术(hypervisors),例如KVM、Xen,另一类为容器技术(container),例如 Linux LXC项目(LinuX Containers)。Fedora项目领袖Robyn Bergeron向eWeek介绍说,Red Hat已经将容器技术作为OpenShift PaaS解决方案的一部分,为用户提供应用分离解决方案。

Bergeron补充说尽管Docker与容器类型类似,但是Docker并非Red Hat目前正在使用的容器技术。他说,dotCloud和Red Hat两家都希望Docker能在Red Hat家族的Linux系统中运行。双方的合作目前集中在将Docker作为Fedora协同开源开发环境的一部分。

dotCloud创始人同时也是Docker项目发起人Solomon Hykes说,Docker并不是为了用来替代LXC。

“Docker底层使用了LXC,并整合了其它技术”,Hykes说,“Docker是现有的低层面技术的一个集合,但并非只是简单的将它们叠加在一起。”

Hykes介绍,他们的目标是为DevOps世界带来一种开发者和运维人员都能明白并使用的技术。一个Docker容器包含了运行一个特定进程所必需的所有的二进制文件、库文件和配置文件。

他还说,“我们希望将容器用于应用程序部署,而不只是将其看做微型服务器。”

容器技术 vs. 管理器技术

在企业级服务领域,许多系统管理员如今都熟悉虚拟机管理器技术,例如VMware ESX、Xen和KVM。Hykes认为容器技术正成为管理器技术的互补。

“管理器技术一直以来的处境是,它确实是一门伟大的技术,但是行业内却把它当做一把大斧头并试图用它来完成所有的木匠活”,Hykes认为虚拟机管理器作为一种服务类型,相当于提供了一台裸机的硬件,而与之相对的,容器的工作就是为这台主机提供一系列软件。

Red Hat与Docker

作为Red Hat的开发合作伙伴,Hykes说他们的首要任务是确保Docker能够在Red Hat家族的Linux系统上流畅运行。他承认目前Docker 0.6版在包括Fedora之内的Red Hat家族的Linux系统上运行时还有一些问题。下一个发布版本0.7版将针对这些问题重点改进,确保Red Hat家族Linux系统成为Docker部署环境的“一等公民”。

迄今为止,dotCloud已经为它的Docker项目筹集到了1000万美元风投资金。Hykes补充说Docker目前还并没有一款成形的商用产品,他们的首要目标是建立Docker社区生态环境与基础用户群。

“dotCloud的第一阶段是确保Docker足够的普及程度,同时取得IT界大客户的青睐,”Hykes说,“能够与Red Hat合作对我们来说是一个巨大阶段性胜利。”

via: http://www.eweek.com/developer/red-hat-expands-virtualization-options-with-open-source-docker.html

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

译者:Mr小眼儿 校对:wxy

有时候在Linux上使用基于GUI的程序,你必须在程序窗口和命令行窗口之间切换。这会消耗一些时间。将一个终端窗口嵌入到程序窗口内部是个很好的解决方案。我不知道在其他程序是否可以,但是,如果你为gedit寻找一个这样的解决方案,那么这儿有一个插件-- Embedded Terminal -- 能让你从gedit窗口内部访问命令行终端。

NOTE -- 这篇文章中使用Ubuntu 13.04作为例子。

简短教程

安装了这个插件后,可以让用户很容易地在编辑文件的同时访问命令行。

这是插件启用后的gedit窗口截图:

gedit-embedded-terminal-colored

如上,你可以看到在gedit窗口内部命令行操作与编辑文本文件集成到了一起。

下载/安装

通过以下步骤来正确地在gedit下载安装和配置embedded terminal插件。

步骤1

通过命令安装gedit插件:

sudo apt-get install gedit-plugins

步骤2

现在,在gedit窗口里,转到Edit(编辑)-->Preferences(首选项)-->Plugins(插件)并且启动Embedded Terminal插件。

gedit-embedded-terminal-enable

步骤3

在gedit窗口中点击View(视图)-->Bottom Panel(底部面板)

gedit-view-bottom-panel

你将在gedit窗口的底部面板看到一个嵌入式终端呈现出来。

gedit-default-embedded-terminal

唯一的问题是色调搭配不是很好,比如,白色的命令提示符在淡灰色背景下几乎看不清。接下来的步骤去修改色调搭配。

步骤4

打开dconf-editor,如果没有安装,通过命令来安装它:

sudo apt-get install dconf-tools

安装后,用下面命令来执行:

dconf-editor

在dconf editor窗口中,转到org-->gnome-->gedit-->plugins-->terminal并且取消选定use-theme-colors选项。

gedit-dconf-settings

步骤5

重启gedit

gedit-embedded-terminal-colored

可以看到,在浅色背景下的黑色的命令提示符。

优点

  • 从gedit窗口内部轻松访问终端
  • 作为一个插件,它能节约任何时间

缺点

  • 在初始化配置里色调搭配问题是个主要问题(译注,估计插件作者使用的深色配色方案的Gedit,因此没有意识到这个问题,期待以后的更新版本会解决这个问题)

总结

无论如何,在Linux中工作总是难以避开命令行。所以,在你常用的程序窗口中嵌入一个终端是一个好多的方法。这个gedit插件是个不错的小工具,它可以帮你节省一些时间。尝试它,它值得你安装。

via: http://mylinuxbook.com/embedded-terminal-a-gedit-plugin/

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

译者:Vito 校对:wxy

lmctfy (Let Me Contain That For you,发音是lem-kut-fee)是谷歌Google开发的容器栈,可以为Linux应用提供容器(container)。这些容器可以让一台机器上的不同应用使用相互隔离的资源,以独占的方式运行在同一台机器上。这些应用也可以拥有容器,因此能够创建和管理属于他们自己的子容器。

这项项目旨在提供一组以用户的意图为原点的高级API,来实现对容器概念的抽象化。这些创建的容器自身也通过继承也可以拥有了自己的容器、也能够被其他的用户程序所管理。

Lmctfy是为某些特定的场景(配置环境)设计、实现的,所以可能不能在所有场景(配置环境)中正常运作。我们的目标是为更多的场景(配置环境)提供更多的支持,所以你可以为这项项目贡献你的补丁或是在邮件列表中发送邮件,这样我们可以朝着既定的路线图前进。

lmctfy 内包含一个C++库和一个CLI(命令行界面程序)

最新进展

lmctfy 还是一个在beta阶段的应用,目前仍在主要开发中。最新的版本是0.1。她目前只支持CPU和内存资源的隔离。点击查看我们的路线图来了解各部分的开发情况,点击查看贡献

从此开始

这一节描述如何编译你的CLI,运行所有的UI测试,和初始化机器的细节。 CLI这节提供了一些CLI操作的例子,C++ 库描述了这个库的使用详情。

依赖

编译本程序需要使用make和g++4.7。 lmcfy使用了C++11,所以需要支持这项功能的编译器。我们在 Ubuntu 12.04+ 上测试过编译。如果有为其他环境的编译提供支持的补丁,我们很高兴而且希望这越多越好。

lmctfy 依赖下列几个库,需要这些库存在于你的计算机系统里。

编译CLI

编译lmctfy的CLI:

make -j <线程数> lmctfy

CLI程序会生成在 bin/lmctfy/cli/lmctfy

编译C++库

编译lmctfy的库:

make -j <线程数> liblmctfy.a

库文件会生成在 bin/liblmctfy.a.

运行测试

编译和运行所有的UI测试:

make -j <线程数> check

初始化

lmctfy已经在 Ubuntu 12.04+ 上的 3.33.8 内核上测试过。 lmctfy在一台机器的所有容器都是运行它的时候运转得最好,所以不建议让她运行在LXC或者其他container系统上(尽管在某些特殊得配置下这能够跑起来)。

为了运行lmctfy,我们必须首先初始化计算机。这只需要运行一次就可以,而且一般是在计算机第一次启动时候就完成了。当cgroup的hierarchies已经挂载了,接下来通常一个空的配置会可以让lmctfy自动监测到目前的挂载。

lmctfy init ""

如果cgroup的hierarchies没有被挂载,那么必须指明这些资源,这样lmctfy才可以挂载他们。目前版本需要以下cgroup的hierarchies资源cpu,cpuset,cpuacct,memory和freezer。 cpu和cpuacct 是目前唯一可以被共享挂载的,其他的必须被单独地挂载。具体配置说明可以查看lmctfy.proto中的InitSpec节。以下的例子是一个挂载了/dev/cgroup中的所有hierarachies的配置文件:

lmctfy init "
  cgroup_mount:{
    mount_path:'/dev/cgroup/cpu'
    hierarchy:CGROUP_CPU hierarchy:CGROUP_CPUACCT
  }
  cgroup_mount:{
    mount_path:'/dev/cgroup/cpuset' hierarchy:CGROUP_CPUSET
  }
  cgroup_mount:{
    mount_path:'/dev/cgroup/freezer' hierarchy:CGROUP_FREEZER
  }
  cgroup_mount:{
    mount_path:'/dev/cgroup/memory' hierarchy:CGROUP_MEMORY
  }"

这样,机器就可以被lmctfy使用、进行容器的操作。

容器的命名

容器的命名系统简化了文件系统的路径,因为以后只需要一系列容器的继承(容器的容器、子容器、子子容器)就可以了♪───O(≧∇≦)O──── ♪。

容器名称允许的字符集:

  • 英文字母+阿拉伯数字 ([a-zA-Z0-9]+)
  • 下划线 (\_)
  • 横县 (-)
  • 英文句号 (.)

绝对路径是从容器(比如是/sys/subcont)的根目录(/)开始计算的。容器的名字也可以是相对的(比如subcont)。一般地(除非特殊情况说明),都是沿用一般的文件路径方式。

例子

    /         : 容器的根目录
    /sys         : "sys" 容器
    /sys/sub    : "sub" 容器,"sys"容器的子容器
    .         : 当前的容器
    ./         : 当前的容器
    ..         : 当前的容器的父容器
    sub         : 当前的容器的"sub" 子容器
    ./sub     : 当前的容器的"sub" 子容器
    /sub         : "sub" 容器
    ../sibling    : 当前的父容器的“sibling”子容器

CLI

创建

创建一个容器:

lmctfy create <名称> <参数>

更完整的细节参见lmctfy.proto

例子 (创建一个内存限制在100MB的容器):

lmctfy create memory\_only "memory:{limit:100000000}"

销毁

销毁一个容器:

lmctfy destroy<名称>

列表

从根目录递归显示当前机器的所有容器:

lmctfy list containers -r /

你也可以只列出当前的子容器:

lmctfy list containers

运行

在一台容器中运行命令:

lmctfy run <名称> <命令行>

例子:

lmctfy run test "echo hello world"

lmctfy run /test/sub bash

lmctfy run -n /test "echo hello from a daemon"

其他

键入lmctfy help查看全部的命令和文档

C++ Library

此库包含了::containers::lmctfy::ContainerApi 用来创建、获取、销毁、监测::containers::lmctfy::Container类型的对象,并且被独立的容器相互交流。具体的lmctfy C++库的文档可以查看头文件lmctfy.h(你是认真的吗( ̄▽ ̄))。

路线图

lmctfy项目通过两个层(CL1、CL2)来实现一个容器栈。CL1围绕着驱动进程,并执行CL2制定的容器策略。CL1会为更高层创建和维护容器的抽象。她应当是唯一直接和内核交流以维护容器的层。 CL2发展和设定容器策略,她使用CL1来执行策略和操控容器。比如,CL2(后台进程)实现了一个策略:所有容器的CPU和内存使用总和不可以超过现提供的CPU和内存资源(以防止对内存资源的过度使用)。为了执行这条策略,她(CL2)会使用CL1(library/CLI)来创建带这条内存限制规则的容器。另一条对应的策略可能包括了允许过度使用X%的机器资源或者对不同资源的多重层次控制。

lmcfty项目现在提供了CL1组件,CL2还没有实现。

CL1

现在只提供高性能CPU和内存隔离。在我们的路线图中我们还需要实现以下几项:

  • 磁盘IO隔离: 这部分几乎完成了,但是我们还缺少控制器和资源处理器。
  • 网络隔离: 这部分和cgroup实现还在计划中。
  • 命名空间支援: 给所有命名空间支援并且整合到相关的资源中。
  • 根文件系统支援: 识别并建立根文件系统。
  • 磁盘镜像: 可以导入和导出容器的根文件系统的镜像。
  • 支持暂停/继续: 使用继承的freezer。
  • 还原点恢复: 可以建立还原点并恢复到不同机器的容器中。

CL2

最基础的CL2 应当有一个容器策略来保证在机器不允许超载运行情况下的资源合理分配。我们的目标是CL2最终实现提供不同层次的服务。在这个框架下一些层次可以比其他的获得更多好的服务。

  • 监控和统计支持。
  • 管理功能和功能检查。
  • 服务的质量保证和执行。

内核支持

lmctfy 最初的设计和实现是在一个自定义的内核上(一个原生linux内核外加一些列自选的补丁)上。由此,一些特性在这些内核补丁上跑得最理想。但是lmctfy应该在没有他们得情况下正常运行。她应当监测可用得内核支援并且与之适应。我们已经在原生的 Ubuntu3.33.8 系列内核上测试过。如果你发现在其他版本内核下的问题,请汇报。

一些相关的内核补丁:

  • CPU 延时: 这个补丁为cpu hierarchy增加了cpu.lat的cgroup 文件。她限制了cgroup能预测的CPU唤醒延时时间。
  • CPU 柱状图统计: 这个补丁为cpuacct hierarchy增加了cpuacct.histogram cgroup 文件。她为CPU计划行为提供了多种柱状图方案。
  • OOM 管理: 一系列的补丁,用于在内存用尽的情况下执行优先权。

贡献

对项目感到兴趣了?看看我们的路线图,看你是不是由很多想贡献的方向呢? 从此开始,你应该可以运行我们的程序。如果无法运行,请让我们知道,这样我们可以改进这份指南。

邮件列表

本项目的邮件列表是[email protected]。本邮件列表用来发布、讨论、一般性支持。

原文: https://github.com/google/lmctfy/

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

译者:Chilledheart 校对:wxy

最近几周里,我总是收到人们询问一些快速零散的问题。有时候一个人是在寻找一个有帮助的建议,或者一个具体的命令,或者一个命令行捷径,以完成一个特定的任务。本篇将介绍最近人们向我提出的三个问题,以及完成这些任务的简单方法。

第一个场景

我们要找到那些在过去的一个月中被改动过的文件,并将他们从当前的位置复制到另一个目录中去。

在这种情况下,能否精确的解决取决于你复制文件的时候是否保持了原来的文件树结构,还是你仅仅只是把所有文件全部复制到了一个指定的地方。如果我们只是想把所有的文件保存到一个文件夹中,或许这样做是为了将这些文件归档,那么我们可以使用find这条命令。通过使用find命令,我们能够根据文件被修改的时间查找到他们的位置,然后复制他们到指定的地方。这条命令看起来是这样:

find Documents -mtime -30 -exec cp "{}" Backup \;

上面这条命令会在Documents文件夹中查找在过去30天内被修改过的文件。这些文件之后将会被复制到另一个叫Backup的目录中去。find命令将会通过调用cp命令来执行复制这一操作。通过修改mtime这条参数,我们可以查找到最近某个时间内被修改过的文件,在上面这个例子中它被设定为在过去的30天内。

更多的时候,我们会想要在把文件复制到目标文件夹后,仍然能够保留源文件夹的目录结构。很多时候,人们都希望两个文件夹的内容同步,然后他们会运行一个脚本来使他们保持一致。这种情况下,我们可能会用到rsync这条命令了。这个工具会把新文件、修改过的文件从一个复制到另一个目录中去,同时保持源目录的展示结构:

rsync -a Documents/ Backup

上面的例子,它会先找到哪些文件在Documents中和Backup中都存在,以便不再复制这些不必要的文件。

第二个场景

有一个我们都会做的很普遍的工作,就是在一个文本文件中找到一个单词,然后用另一个单词把这个词在文本中的所有实例都替换掉。

比如,假设我有一个文档中提到一个人名叫“Becky”,但是我后来决定还是用稍微正式点的称呼“Rebecca”为好。对文件中的这个简单的改动,下面这条命令会起到作用:

perl -pi -e 's/Becky/Rebecca/' mydocument.txt

这条微型的Perl脚本会查询文档中所有“Becky”的实例,并且将之改为“Rebecca”。程序首先读取名为mydocument.txt这个要改动的文档,待修改完毕后再保存回去。

第三个场景

一个普遍关注的问题是,在一个硬盘要给别人或者被扔掉之前,需要对其中存储的敏感数据做些什么。

有些人会在电脑里保存一些银行的业务数据或者税务信息,那么这些数据最好在你的硬盘被转手到别人之前被彻底清理掉。现在有一些方法和工具可以让你使用。我最喜欢的一个是shred这条命令,它不仅能对单一文件进行处理,同样也能对整个设备进行处理。要重写一个文件里面的内容,我们可以这样运行shred

shred mytaxes.odt

上面这个例子中,它会移除文件里存的内容,但并不会把文件本身从硬盘中删除掉。如果要清除文件的内容同时删除掉这个文件,我们可以这样运行:

shred -u mytaxes.odt

需要强调的一点是,shred并不是在所有的文件系统中都能正常运行,尤其是那些带有日志功能的比较新的文件系统。在shred的操作手册中写明了哪些文件系统运行这个程序的时候会出问题。当处理敏感数据的时候,最好的方法也许是清除掉整张硬盘。shred同样也能办到。下面这个例子中,显示了如何移除掉我们电脑中第一块硬盘内的所有数据。使用这条命令一定要非常小心:

shred /dev/sda

via: http://distrowatch.com/weekly.php?issue=20130923

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

译者:markvv 校对:wxy