在 Mac OS X 终端里使用 Solarized 配色方案

相信长期浸泡在终端和代码的小伙伴们都有一套自己喜爱的配色方案。以前一直在用简单、适合阅读的 Terminal.app 配色方案换到 MacBook Pro with Retina display 后发现这个配色时间看长了眼睛有点累。不断有人推荐 Solarized,看了一些截图,感觉还不错,决定试一下。

Solarized 是目前最完整的 Terminal/Editor/IDE 配色项目,几乎覆盖所有主流操作系统(Mac OS X, Linux, Windows)、编辑器和 IDE(Vim, Emacs, Xcode, TextMate, NetBeans, Visual Studio 等),终端(iTerm2, Terminal.app, Putty 等)。类似的项目还有 Tomorrow Theme.

要在 Mac OS X 终端里舒服的使用命令行(至少)需要给3个工具配色,terminal、vim 和 ls. 首先下载 Solarized:

$ git clone git://github.com/altercation/solarized.git

Terminal/iTerm2

Mac OS X 自带的 Terminal 和免费的 iTerm2 都是很好用的工具,iTerm2 可以切分成多窗口,更方便一些。

如果你使用的是 Terminal 的话,在 solarized/osx-terminal.app-colors-solarized 下双击 Solarized Dark ansi.terminal 和 Solarized Light ansi.terminal 就会自动导入两种配色方案 Dark 和 Light 到 Terminal.app 里。

如果你使用的是 iTerm2 的话,到 solarized/iterm2-colors-solarized 下双击 Solarized Dark.itermcolors 和 Solarized Light.itermcolors 两个文件就可以把配置文件导入到 iTerm 里。

Vim

Vim 的配色最好和终端的配色保持一致,不然在 Terminal/iTerm2 里使用命令行 Vim 会很别扭:

$ cd solarized
$ cd vim-colors-solarized/colors
$ mkdir -p ~/.vim/colors
$ cp solarized.vim ~/.vim/colors/

$ vi ~/.vimrc
syntax on
set background=dark
colorscheme solarized

iterm2 and solarized

ls

Mac OS X 是基于 FreeBSD 的,所以一些工具 ls, top 等都是 BSD 那一套,ls 不是 GNU ls,所以即使 Terminal/iTerm2 配置了颜色,但是在 Mac 上敲入 ls 命令也不会显示高亮,可以通过安装 coreutils 来解决(brew install coreutils),不过如果对 ls 颜色不挑剔的话有个简单办法就是在 .bash_profile 里输出 CLICOLOR=1:

$ vi ~/.bash_profile
export CLICOLOR=1

vim and solarized

MacBook Pro with Retina display

上周订购的13寸 MacBook Pro with Retina display 到了,本来13寸的 MacBook Air 也在我这次的考虑范围内,没有选它的主要原因是屏幕,Retina 屏实在好太多了,可以说这是小伙伴们目前在大众市场上能买到的最好笔记本屏幕了,没有之一,好吧,我忘了还有 Google Chromebook Pixel,不过目测感觉一般。也考虑过 15寸的 MacBook Pro (Retina),不过根据上两次的使用经验来看,15寸体积有点大,移动办公的时候不方便,不适合我的工作场景。

对于程序员、IT 屌丝、office lady 或任何每天使用电脑超过6小时的人士来说,好的电脑屏幕不但可以显著提高生产力,还能保护眼睛,说 “屏幕” 能 “保护眼睛” 可能不妥,换个说法,“和劣质屏幕相比,好屏幕能减少对眼睛的伤害”,眼睛很重要,你懂的。

没有选 MacBook Air 还有一个原因(对于我来说)就是太薄,亲,薄难道不是优点吗?有的人可能喜欢轻巧的机器,不过 MacBook Air 在我手里会有种把它折断的担心。

13 寸的 MacBook Air 和 MacBook Pro (Retina) 硬件配置差不多,MacBook Pro 的 CPU 稍微好一点。MacBook Air 标配的是 4GB 内存(可选配 8GB),MacBook Pro 标配 8GB,内存足够用了,同时开几个虚拟机都没问题。SSD 硬盘确实提升了不少性能,一些大型应用程序基本能瞬间打开,感觉很明显,目测都能看出来。

为什么国外程序员爱用 Mac?” 是几年前无意写的一篇吐槽文居然引来近两百个回复,其中不乏一些高质量的评论,实在难得。如果有人要问 Mac 的最大优点是什么?不同的人可能有不同的看法,个人认为,Mac 最大的优点是生产力,Mac 极大的提高了本人的工作效率。通过一流的软件和硬件设计 Mac 帮助使用者简化了操作、简化了配置、简化了界面,大幅提高了使用者的生产力。

Life is short, get a Mac:)

macbook pro with retina display
macbook pro with retina display

CentOS 上的 LNMP 一键安装工具 Centmin Mod

最近我们的 VPS 新手客户突然增多,不知道小伙伴们都从哪里来的,可能某个论坛提到我们的 VPS,只要听到 “求教程” 这种呐喊就能从地球的另一半边感受到这种急切。在 Linux 上安装 Nginx, MySQL, PHP(俗称 LNMP)就是一行命令的事情,实在不需要什么 “教程”,就算要教程 google/baidu 一下就可以搜到一大把,实在没必要再 “求” 一遍。比如,在 Ubuntu 12.04 上安装 Nginx, MySQL, PHP:

$ sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql nginx php5-fpm

个人不推荐新手一开始就使用一键安装工具,一键安装工具隐藏了细节,不利于学习。不过自己动手配过几次系统、熟悉了 Linux 以后再回过头来看,使用一些一键安装工具还是很方便的,一键安装工具除了能安装必要的软件外还有一些附加功能,比如 “关闭 SELINUX”、“更改 SSH 端口”、“增加一个 vhost” 等。这里介绍的一键安装工具 Centmin Mod 是由原 Centmin 脚本改良而来,貌似原 Centmin 停止更新了。

需要注意的是,Centmin Mod 只能运行在 CentOS/RHEL 系统上,而且用 MariaDB 替代了原始的 MySQL,这一点大家应该不用担心,几乎所有主流 Linux 发行版本(Fedora/RHEL, openSUSE, Arch Linux, Slackware)的默认 MySQL 版本都将会切换到 MariaDB,Red Hat 会在 RHEL 7.0 里使用 MariaDB,Google 也在用 MariaDB 替换 MySQL 中

运行 Centmin Mode 脚本前先 update 一下整个系统,必要的话重启一下:

# yum -y update
# reboot

下载和解压 CentMin Mod 包,增加 centmin.sh 的可执行权限:

# wget http://centminmod.com/download/centmin-v1.2.3-eva2000.03.zip
# unzip centmin-v1.2.3-eva2000.03.zip
# cd centmin-v1.2.3mod/
# chmod +x centmin.sh

运行这个脚本:

# ./centmin.sh
--------------------------------------------------------
Centmin Mod 1.2.3-eva2000.03 - http://centminmod.com
--------------------------------------------------------
                   Centmin Mod Menu
--------------------------------------------------------
1).  Centmin Install
2).  Add Nginx vhost domain
3).  NSD setup domain name DNS
4).  Nginx Upgrade / Downgrade
5).  PHP Upgrade / Downgrade
6).  XCache Re-install
7).  APC Cache Re-install
8).  XCache Install
9).  APC Cache Install
10). Memcached Server Re-install
11). MariaDB 5.2.x Branch Upgrade Only
12). MariaDB 5.2.x to MariaDB 5.5 YUM upgrade
13). Install ioping.sh vbtechsupport.com/1239/
14). SELinux disable
15). Install/Re-install imagick PHP Extension
16). Change SSHD Port Number
17). Multi-thread compression: pigz,pbzip2,lbzip2,p7zip etc
18). Suhosin PHP Extension install
19). Install FFMPEG and FFMPEG PHP Extension
20). NSD Re-install
21). Exit
--------------------------------------------------------
Enter option [ 1 - 21 ] 1

...

*************************************************
* Centmin Mod install completed....
*************************************************

上面的菜单提示很清楚,选择 1). Centmin Install 开始安装我们要的 Nginx/MySQL/PHP,安装完毕后(大概需要10到30分钟)从浏览器上直接通过 IP 访问这个 VPS 可以看到 Nginx Test Page.

如果需要增加一个 Nginx vhost 配置的话,选择 2). Add Nginx vhost domain:

# ./centmin.sh
--------------------------------------------------------
Centmin Mod 1.2.3-eva2000.03 - http://centminmod.com
--------------------------------------------------------
                   Centmin Mod Menu
--------------------------------------------------------
1).  Centmin Install
2).  Add Nginx vhost domain
3).  NSD setup domain name DNS
4).  Nginx Upgrade / Downgrade
5).  PHP Upgrade / Downgrade
6).  XCache Re-install
7).  APC Cache Re-install
8).  XCache Install
9).  APC Cache Install
10). Memcached Server Re-install
11). MariaDB 5.2.x Branch Upgrade Only
12). MariaDB 5.2.x to MariaDB 5.5 YUM upgrade
13). Install ioping.sh vbtechsupport.com/1239/
14). SELinux disable
15). Install/Re-install imagick PHP Extension
16). Change SSHD Port Number
17). Multi-thread compression: pigz,pbzip2,lbzip2,p7zip etc
18). Suhosin PHP Extension install
19). Install FFMPEG and FFMPEG PHP Extension
20). NSD Re-install
21). Exit
--------------------------------------------------------
Enter option [ 1 - 21 ] 2
--------------------------------------------------------

---------------------------------------------
Enter vhost domain name you want to add (without www. prefix): vpsee.com


---------------------------------------------
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Reloading nginx:                                           [  OK  ]

---------------------------------------------
vhost for vpsee.com created successfully
vhost conf file for vpsee.com created: /usr/local/nginx/conf/conf.d/vpsee.com.conf
upload files to /home/nginx/domains/vpsee.com/public
vhost log files directory is /home/nginx/domains/vpsee.com/log

Current vhost listing at: /usr/local/nginx/conf/conf.d/

Sep 11  22:26   2.3K   virtual.conf
Sep 11  22:26   798    ssl.conf
Sep 11  22:55   1002   vpsee.com.conf
---------------------------------------------

如果想安装 PHP 加速器 APC 的话运行 centmin.sh 后选择 9). APC Cache Install;如果想更改 SSH 端口?想关闭 SELinux?看上面的菜单提示吧。

开源虚拟桌面系统 Ulteo OVD

我们几年前用 Solaris + SunRay Software 实现的类 VDI 系统(不熟悉 SunRay 的小伙伴可看看 SunRay/Sun VDI 和 JavaOne由 SunRay 耗电量想到的),后来改成 CentOS + SunRay Software,SUN 被 Oracle 收购后事情变得复杂起来,Solaris 不再免费,SunRay Software 和 Hardware 貌似都被 Oracle 叫停。我们不得不开始寻找下一个替代品,开源 VDI 选择不多,Ulteo 可能是唯一的一个。

Mandrake Linux 的创始人 Gaël Duval 离开 Mandriva 公司后,开发了一套开源虚拟桌面(Open Virtual Desktop, OVD)系统 Ulteo,允许用户在任何设备上通过浏览器运行(远程服务器上的)Linux 或 Windows 应用程序(不过浏览器需要有 Java 的支持)。虽然 Ulteo 叫它 OVD,实际上就是我们通常所说的桌面虚拟化 VDI.

Ulteo 这个开源桌面虚拟化产品包括了一些新特性,比如:新的 Web 门户风格模块(Web Portal OVD module),可以让远程应用程序独占一个本地浏览器窗口,看上去像这个程序运行在本地一样;Ulteo 支持多个认证服务,比如可以很好的和我们内部的 LDAP 服务器连接起来,不用另外创建用户登陆;用户之间可以共享文件、文件夹;可以定制应用程序组和用户组,允许不同的用户使用不同的程序等等。

Ulteo OVD 安装很容易,可以作为独立的软件安装在现有的系统上(支持 Ubuntu/RHEL/CentOS/SUSE Linux Enterprise Server/Windows Server);可以下载已经定制好的 Ulteo OVD DEMO DVD 刻盘后安装,或者更懒一点,直接下载一个虚拟机镜像 Ulteo OVD DEMO VIRTUAL APPLIANCE(支持 VMWare Player, Citrix XenServer, VirtualBox 和 KVM)运行。

安装完 Ulteo 后看屏幕提示,默认用户名和密码都是 ulteo,如果要改变网络设置的话,可以运行 net-config.sh:

### Ulteo OVD 3.0 ###
With a web browser, you can connect to:
 - http://172.20.1.227/ovd            to launch a user session
 - http://172.20.1.227/ovd/admin      to administrate OVD

This virtual machine is configured to obtain the network configuration
using DHCP. If you don't have a DHCP server available, log as
"ulteo" (password "ulteo") and run:

sudo net-config.sh

To configure the basic network parameters. Reboot after configuration.

ulteo-ovd-3 login:

从客户端的浏览器上输入安装好 Ulteo 的服务器地址(这里的服务器 IP 地址是 172.20.1.227)就会出现 Ulteo 登陆界面,登陆前最好先到 http://172.20.1.227/ovd/admin/ 创建一个新用户。登陆后是标准的 Linux 桌面,运行很流畅:

ulteo ovd

对于那些使用内部 DNS 服务的环境来说 Ulteo 有个 DNS 配置小问题需要解决, 用 ssh 登陆 Ulteo 服务器后发现网络和 DNS 配置(/etc/resolv.conf)都没问题,但是从客户端浏览器登陆 Ulteo 后无法上网。查了一下日志发现 Ulteo 桌面实际上运行在一个 chroot 环境,需要 chroot 进去后修改桌面环境的 /etc/resolv.conf,而不是修改 Ulteo 服务器上的 /etc/resolv.conf):

$ sudo uchroot
[sudo] password for ulteo:
(OVD)root@ulteo-ovd-3:/#

(OVD)root@ulteo-ovd-3:/# vi /etc/resolv.conf
nameserver 192.168.1.80
nameserver 192.168.1.81

修改完成后,在客户端浏览器退出 Ulteo 界面重新登陆就可以了。

解决 MySQL 的 Table is marked as crashed and should be repaired 问题

昨天一位 VPS 客户说他的 WordPress 博客没了,网站可以打开,但是文章都没了,怀疑被黑。我们登陆客户 VPS 后没发现被黑迹象,然后进入 MySQL 数据库发现 Table ‘./wordpress/wp_posts’ is marked as crashed and should be repaired 错误,因为 wp_posts 表被损坏了,所以 WordPress 的文章都显示不出来:

# mysql -u root -p
Enter password:

mysql> use wordpress;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from wp_posts;
ERROR 145 (HY000): Table './wordpress/wp_posts' is marked as crashed and should be repaired
mysql> Bye

修复 MySQL 数据库数据表问题可以由 mysqlcheck 来解决,先用 mysqlcheck 查看一下:

# mysqlcheck -u root -p wordpress
Enter password:

然后添加 –auto-repair 参数自动修复,最好修复前备份一下数据库:

# mysqldump -u root -p wordpress > wordpress.sql
Enter password:

# mysqlcheck -u root -p wordpress --auto-repair
Enter password:
wordpress.wp_commentmeta
error    : Table upgrade required. Please do "REPAIR TABLE `wp_commentmeta`" or dump/reload to fix it!
wordpress.wp_comments
error    : Table upgrade required. Please do "REPAIR TABLE `wp_comments`" or dump/reload to fix it!
wordpress.wp_links
error    : Table upgrade required. Please do "REPAIR TABLE `wp_links`" or dump/reload to fix it!
wordpress.wp_options
error    : Table upgrade required. Please do "REPAIR TABLE `wp_options`" or dump/reload to fix it!
wordpress.wp_postmeta
error    : Table upgrade required. Please do "REPAIR TABLE `wp_postmeta`" or dump/reload to fix it!
wordpress.wp_posts
error    : Table upgrade required. Please do "REPAIR TABLE `wp_posts`" or dump/reload to fix it!
wordpress.wp_term_relationships                OK
wordpress.wp_term_taxonomy
error    : Table upgrade required. Please do "REPAIR TABLE `wp_term_taxonomy`" or dump/reload to fix it!
wordpress.wp_terms
error    : Table upgrade required. Please do "REPAIR TABLE `wp_terms`" or dump/reload to fix it!
wordpress.wp_usermeta
error    : Table upgrade required. Please do "REPAIR TABLE `wp_usermeta`" or dump/reload to fix it!
wordpress.wp_users
error    : Table upgrade required. Please do "REPAIR TABLE `wp_users`" or dump/reload to fix it!

Repairing tables
wordpress.wp_commentmeta                       OK
wordpress.wp_comments                          OK
wordpress.wp_links                             OK
wordpress.wp_options                           OK
wordpress.wp_postmeta                          OK
wordpress.wp_posts                             OK
wordpress.wp_term_taxonomy                     OK
wordpress.wp_terms                             OK
wordpress.wp_usermeta                          OK
wordpress.wp_users                             OK

系统自动化配置和管理工具 SaltStack

saltstack logo

我们的服务器由 Puppet 配置管理工具来管理,服务器上线后由 puppet 完成初始化和配置等一系列工作(比如,静态 IP 配置,DNS 设置,NFS/SAN 挂载,LDAP/Kerberos 登录,安全加固配置,内核参数优化,防火墙规则配置等等),等初始化完成后开始运行,运行一段时间后有一些需要自动和手动操作的任务(比如升级、重启、备份等),这时候我们使用 Fabric 来批量执行这些临时任务。

所以从这里可以看到 Puppet 和 Fabric 其实是两个不同性质的工具,看下面的归类可能会更清楚一些。Puppet 和 Fabric 两个的工作其实可以由一个工具 SaltStack(或 AnsibleWorks)完成,减少一个工具的使用会减轻一点负担(学习工具的人力成本、安装和配置工具的时间成本等等)。

操作系统和软件的安装、配置、初始化等;
(Puppet, Chef, CFEngine, AnsibleWorks, SaltStack, …)

自动执行任务,比如定期备份、清除日志等;
(Fabric, AnsibleWorks, SaltStack, …)

手动执行任务,比如部署应用、升级、重启、检查和校验文件系统、增加用户等。
(Fabric, Rake, Func, Rundeck, AnsibleWorks, SaltStack, …)

SaltStack 采用 zeromq 消息队列进行通信,和 Puppet/Chef 比起来,SaltStack 速度快得多。还有一点我们喜欢 SaltStack 的地方是它是 Python 写的,比 Puppet/Chef 这些 Ruby 工具更接近我们的能力圈。

安装主控服务器(salt master)

和大多数类似工具一样,SaltStack 需要在一台机器(主控)上安装服务器端软件(SaltStack 称之为 salt master),在多台机器(受控)上安装客户端软件(SaltStack 称之为 salt minion)。在主控机器上给下属(受控)发命令,在受控机器上接受和执行上级(主控)的命令。

在 Ubuntu 上安装 salt master:

$ sudo add-apt-repository ppa:saltstack/salt
$ sudo apt-get update
$ sudo apt-get install salt-master

在 CentOS 6.x 上安装 salt master:

# rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# yum update
# yum install salt-master

安装受控客户端(salt minion)

在 Ubuntu 上安装 salt minion:

$ sudo add-apt-repository ppa:saltstack/salt
$ sudo apt-get update
$ sudo apt-get install salt-minion

在 CentOS 6.x 上安装 salt minion:

# rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# yum update
# yum install salt-minion

安装完 salt minion 后记得修改配置文件,让 salt minion 指向 salt master 服务器地址:

$ sudo vi /etc/salt/minion
...
# Set the location of the salt master server, if the master server cannot be
# resolved, then the minion will fail to start.
master: saltmaster.vpsee.com
...

$ sudo restart salt-minion

在 master 上执行 salt-key list 就会看到有个 minion1.vpsee.com 请求加入受控,执行 -a 接受请求后,主控和受控之间的信任关系就建立起来了,主控就可以任意 “摆布” 受控了:

# salt-key list
Accepted Keys:
Unaccepted Keys:
minion1.vpsee.com
Rejected Keys:

# salt-key -a minion1.vpsee.com
The following keys are going to be accepted:
Unaccepted Keys:
minion1.vpsee.com
Proceed? [n/Y]

执行命令的例子

在主控机器上执行一个命令,让所有受控机器执行 hostname 命令:

# salt '*' cmd.run "hostname"
minion1.vpsee.com:
    minion1.vpsee.com

在主控机器上执行一个命令,让所有受控机器上执行内建 test.ping 命令:

# salt '*' test.ping
minion1.vpsee.com:
    True

还有一些内建命令可以尝试:

# salt '*' disk.usage
# salt '*' network.interfaces

执行状态的例子

开头的时候我们说了 SaltStack = Fabric + Puppet,上面 “执行命令的例子” 演示了 Fabric 类似的功能,这里要演示的是 Puppet 类似的功能,在主控上定义好系统配置应该有的状态,然后受控自动完成相应的操作和配置。

首先确定状态定义的文件应该放在什么地方,以下操作都在主控(salt master)上执行。检查 /etc/salt/master 文件的 file_roots 条目,默认是在 /srv/salt 下,如果没有这个目录还需要手动创建一个:

# vi /etc/salt/master
...
#file_roots:
#  base:
#    - /srv/salt
...

# mkdir /srv/salt

比如我们想在所有受控机器上安装 vim 软件包,并使用自己定义的 vimrc 文件:

# vi /srv/salt/vim.sls
vim:
  pkg.installed

/etc/vimrc:
  file.managed:
    - source: salt://vimrc
    - mode: 644
    - user: root
    - group: root

# vi /srv/salt/vimrc
syntax enable
set textwidth=79
set shiftwidth=4
set tabstop=4
set expandtab
set softtabstop=4
set shiftround
set fileencodings=utf-8
set encoding=utf8
set tenc=utf8

强制执行这个状态:

# salt '*' state.sls vim

再来一个例子,参考 “安装和使用系统监控工具 Glances” 一文,我们想在所有受控机器上安装 Glances,如何实现呢?

# vi /srv/salt/glances.sls
python-pip:
  pkg.installed

build-essential:
  pkg.installed

python-dev:
  pkg.installed

glances:
  pip.installed:
    - require:
      - pkg: python-pip

强制执行这个状态:

# salt '*' state.sls glances
...
minion1.vpsee.com:
----------
    State: - pip
    Name:      glances
    Function:  installed
        Result:    True
        Comment:   Package was successfully installed
        Changes:   Glances==1.7.1: Installed
...

设计师的 Linux 桌面发行版 elementary OS

很少关注桌面方面的事情,上次玩了一下 CrunchBang Linux 后又点燃了对 Linux 各种版本的好奇。今天介绍的是 elementary OS,号称 “最美的 Linux”. Elementary 最早是 Ubuntu 的一个美化项目,现在成了一个独立的 Linux 桌面发行版 elementary OS(基于 Ubuntu)。

安装完 elementary OS 后登陆界面不错,进去后感觉也挺好,要说 “最美” 可能有人有不同的看法,不过的确是精心设计过的。有点不习惯的是,elementary OS 在默认软件选择上有点非主流,浏览器用的是 Midori,邮件程序用的是 Geary Mail,Terminal 用的是 Pantheon Terminal,文本编辑器用的是 Scratch,音乐播放器使用的是 noise,文件管理器是 Pantheon Files,猜测项目的作者选择这些软件是为了更好的和发行版的风格兼容。貌似自带的大部分软件都是自家写的,比如 Pantheon Terminal, Pantheon Files, noise, Scratch 等就是 elementary Apps team 维护的。

elementary OS 默认桌面:

elementary OS

浏览器和 Terminal:

elementary OS

虽然 elementary OS 的默认软件有点非主流,不过可以很容易通过它自带的 Software Center 安装自己喜欢的软件,当然也可以 apt-get install,甚至连 elementary OS 的源(/etc/apt/sources.list)都是直接用的是 ubuntu 的,更像是一个 Ubuntu 衍生版:

elementary OS

默认带的中文字体发虚,安装一个中文字体:

$ sudo apt-get update
$ sudo apt-get install ttf-wqy-microhei

想安装更多好看的主题的话参考 5 New Awesome Elementary Themes,先安装用来切换主题调整界面的工具 elementary-tweaks,再安装主题本身 elementary-blue-theme:

$ sudo add-apt-repository ppa:versable/elementary-update
$ sudo apt-get update
$ sudo apt-get install elementary-tweaks
$ sudo apt-get install elementary-blue-theme

简单的说,可以把 elementary OS 看成一个简化的、美化的、符合部分人喜好的 Ubuntu,简单归简单,貌似 elementary OS 的目标一点都不简单,为了统一风格、用户体验和精益求精,不惜重复造轮子采用 Vala 语言重新开发一些常用应用软件,有别于那种用第三方软件拼凑起来的发行版,不知道这种模式能坚持多久,这里做个记号,重点关注一下。

如何的退出无响应的 SSH 连接

大家有时候会发现 ssh 挂在那里没有响应了,可能是客户端的问题,也可能是服务器端的问题,也可能是客户端和服务器之间的网络问题;可能是客户端电脑休眠后连接断了、可能是网络断了、可能是 WiFi 信号不好、可能是网络延迟大了、可能是服务器挂了、也可能是服务器上的 sshd 进程挂了,…,可能是技术问题,也可能是非技术问题,可以找出无数可能。

我常遇到或者说每天都遇到的情形是,离开办公桌前忘了退出 ssh 会话。工作的时候长时间 ssh 到服务器上,工作完盖上 Mac 走人,回家后发现那些没退出的 ssh 会话还挂在那里,无法退出、无法 Ctrl+C、无法做任何操作。我的粗暴做法通常是直接关闭 Terminal 后重新开一个新的;如果用的不是图形系统,没有窗口可以关闭,那还要启用另一个终端找到相关进程后 kill 掉,如果每天都要搞这么几次还是挺烦人的。今天无意中从同事那里学到了一个小技巧,在那些没退出的 ssh 会话里用 ~. “优雅” 的断开连接。

~.

查看一下 man 帮助文件发现已经有说明,惭愧的是用了这么多年 ssh 才发现有这么一招:

$ man ssh
...
ESCAPE CHARACTERS
     ...

     The supported escapes (assuming the default `~') are:

     ~.      Disconnect.

轻量级 Linux 桌面发行版 CrunchBang

这周拿到一台新笔记本,很久没摸过 PC 忽然发现自己彻底 out 了。开机预装的是 Windows 8,界面飞来飞去,想看看配置不知道怎么去控制面板,花了两分钟没找到关机菜单,直接电源长按强制关机,重启后准备安装 Linux,发现现在流行什么 UEFI,无法装 Linux,一顿搜索发现需要在 BIOS 里换成 Legacy …

朋友推荐的 CrunchBang 用了几天感觉非常棒,这才是一个系统应该有的嘛,轻量级、不过分占用资源,界面低调简洁,默认软件都已经精心挑选,装完系统后立刻可用(对于我的需求来说),不需要 “安装完 … 后必做的10件事”,…,相信有类似喜好(minimalism & simplicity)的 Linux 爱好者都会喜欢。

安装完后的桌面:

crunchbang linux

CrunchBang 是一款基于 Debian GNU/Linux、使用 Openbox 作为窗口管理器的轻量级 Linux 桌面发行版。界面看上去简洁、优雅,符合个人喜好;系统符合轻量级的要求,占用资源少、速度快;软件选择上偏向轻量级,默认安装好的软件多是自己常用的,省了自己安装和配置的时间;细节上 CrunchBang 处理也很到位,桌面已经配置好 SYSTEM INFO(有人喜欢在桌面或者任务栏看到系统资源占用情况),桌面还有个 SHORTCUT KEYS 用来帮助新手记住一些常用快捷键。按照自己使用电脑的习惯,CrunchBang 安装完后就基本可用,无线网络、外接显示器、打印机、多窗口、Google Chrome 浏览器、Terminal 分屏显示等等这些我要用到的统统默认,无需更多配置,简直就是 “我” 的发行版。

Chrome 浏览器和 Terminal:

crunchbang linux

近距离看菜单和背景,个人挺喜欢的风格:

crunchbang linux

有个小问题就是选择安装英文版系统的话不会默认安装中文字体,这样中文网页打开看到的是方块,所以想看中文的话需要安装个中文字体:

$ sudo apt-get update
$ sudo apt-get install ttf-wqy-microhei

安装和使用系统监控工具 Glances

Glances 是前几天网上闲逛的时候发现的一款 “新” 系统监控工具,尽管现在监控工具有很多选择,Glances 还是有些值得关注的,和那些常用的老牌监控工具比起来,比如 top/vmstat/iostat 只能监控本机系统,Glances 可以监控本机也可以通过客户端服务器模式监控其他机器;Glances 提供了基于 XML/RPC 的 API 便于其他程序调用,可编程;Glances 可以将数据输出保存到 csv 或 html 格式的文件方便其他程序处理(报告或绘制图形)。

Glances 是用 Python 开发的,使用 psutil 库来采集系统数据,在用户的终端上实时动态的显示重要的系统数据和变化。显示的数据包括:CPU、内存、磁盘、网络等使用情况,内核、运行队列、负载、I/O 状态、消耗资源最多的进程等等。

安装

Glance 支持 Linux, Mac OS X, FreeBSD, Windows 等多个系统,安装也很方便。在 Ubuntu 上安装:

$ sudo apt-get update
$ sudo apt-get install python-pip build-essential python-dev

$ sudo pip install glances

在 CentOS 6.x 上安装:

$ su root
# rpm -ivh http://fr2.rpmfind.net/linux/epel/6/x86_64/epel-release-6-7.noarch.rpm
# yum install python-pip python-devel
# pip-python install glances

在 FreeBSD 上安装:

# pkg_add -r py27-glances
或者
# cd /usr/ports/sysutils/py-glances/
# make install clean

使用

Glances 可以单机使用,也可以客户端-服务器模式多机使用。单机使用很简单,直接运行就可以了:

$ glances

客户端-服务器模式稍微复杂一点,需要在一台机器上以服务器模式启动 glances -s,另外一台机器以客户端模式连接 glances -c. 比如在有两台机器 A 和 B 都装了 glances,要想在 A 上看 B 上的 glances 的话需要事先在 B 上用服务器模式启动 glances(假设 B 的 IP 地址是 192.168.2.22):

$ glances -s

然后再从 A(客户端)用 Glances 访问 B(服务器):

$ glances -c 192.168.2.22

编程

Glances 和其他一堆老牌系统监控工具相比其突出优点在于提供 XML-RPC API,可编程。使用 Glances 提供的 API,我们可以通过编程轻松获取(我们想要的)数据。比如下面的是一个打印系统信息的简单 Python 脚本:

$ vi test.py
#!/usr/bin/python
import xmlrpclib

s = xmlrpclib.ServerProxy('http://192.168.2.22:61209')
print s.getSystem()

运行上面这个脚本:

$ python test.py
{"linux_distro": "Ubuntu 12.04", "platform": "64bit", "os_name": "Linux", "hostname": "vpsee.com", "os_version": "3.2.0-23-virtual"}

Glances 的界面:
docker desktop