Linux系统管理

关注Linux系统管理,运维开发以及大数据

命令行配置PPTP VPN

| Comments

图形化界面上配置 VPN 已经很方便了。但是在命令行下,Linux 还不是那么容易能搞定 VPN 的配置已经连接。需要一些软件包的支持和一些配置工作。

下面是基于 CentOS 6.4 的配置步骤。假定你的 VPN 服务器地址是192.240.240.112,账号是vpn,密码是vpntest

静态编译tmux 1.9a版本

| Comments

tmux 的最新版本 1.9 带来了很多特性,而 CentOS 的仓库里,目前我只能找到1.6的版本。因此想要自己编译一个,但是tmux 1.9a编译时要求 libevent2.x的版本,而 CentOS 6.x 默认还是1.x的版本,为了不影响系统的稳定性,决定采取静态编译的方式。流程如下:

move to github

| Comments

这两天把荒废了一年多的 blog 又整理了一下,做了几件事情:

  1. 把 blog 从自有的 VPS 上迁移到了 github,也定制了域名
  2. 把 blog 的引擎有 octopress 迁移到 hexo,octopress 什么都好,就是当帖子数多了后,生成静态文件的时间太太太长了。吐槽的人很多,比如这里,这里这里
  3. 砍掉了很多过时的帖子,似乎没有次整理 blog,都会删除部分帖子。记得从 boblog 到 wordpress 就砍掉了将近 1/3 的帖子,后来从 wordpress 迁移到 octopress 又砍掉了不少帖子。这次迁移到 hexo,又砍掉了将近 1/3 的帖子。
  4. 域名从原来的blog.wgzhao.com迁移到wgzhao.com,前者将做 301 跳转.

一些Mac OS X 的使用技巧

| Comments

下面的这些 Mac 上使用的小技巧都来自《Mac Kung Fu(2nd edition)》 这本书,改书讲述了超过 400 个使用 Mac 的技巧,但是个人感觉很多技巧并不是那么实用,因此这里只摘录了个人觉得用得上的一些技巧。更详细和完善的技巧,大家可以点击这里.

FaceTime 呼叫自动应答如果有人通过 FaceTime 呼叫你,默认情况下,你是需要点击接受才能建立起呼叫的,怎么才能做到自动应答呢,我们可以通过下面的方法

  1. 打开你喜欢的终端,输入下面的指令

    defaults write com.apple.FaceTime AutoAcceptInvites -bool TRUE

  2. 接下来,架设你希望 FaceTime ID(一般就是 Apple ID)为 wgzhao@gmail.com 的人呼叫的时候,能够自动应答,那么就输入下面的指令:

    defaults write com.apple.FaceTime AutoAcceptInvitesFrom -array-add wgzhao@gmail.com

    如果你希望能够自动应答的联系人是通过手机号码呼入进来的,那就把上面的邮件地址换成手机号码,不过要注意的是,手机号码前需要加上国码标志,比如中国是+86,那么指令类似如下:
    defaults write com.apple.FaceTime AutoAcceptInvitesFrom -array-add +8618612341234

  3. 重启 FaceTime,然后试试,应该就可以了。

如果你想删除自动应答,那很简单,删除上述两条指令就好了,类似如下:

default delete com.apple.FaceTime AutoAcceptInvites default delete com.appple.FaceTime AutoAcceptInvitesFrom

当然,你可以直接编辑~/Library/Preferences/com.apple.FaceTime.plist文件来删除上述两项.

生成随机字符串以及自动更新时间戳和返回最近插入的ID号

| Comments

PostgreSQL下的几条 SQL 语句小技巧。

生成随机字符串这个是从别人的 blog 上看到的,在做一些测试需要加载一些数据的时候用得上。于是摘录到这里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    SELECT(
       SELECT string_agg(x, '')
         FROM (
          SELECT chr(ascii('a') + floor(random() * 26)::integer)
               FROM generate_series(1, 40 + b * 0)
           ) AS y(x)
       )
    FROM generate_series(1,5) as a(b);
                    string_agg
    ------------------------------------------
     hnwjotzpvihnglbcfamgffisgdyveqjlefvtzviu
     ephkbjmgkznqevikyggdxpocvkvugdpktxuuhhbr
     gohljpwiwclusawnkrirvxbovwjcdktjzbujrqrn
     tdildezovigqfhfbdodgzxpzykiqbaeudmghqfwm
     ncdtkiunxyuwwjvuuelvepqibwqrcneqphkzqenn
    (5 rows)

生成的字符串在[a-z]之间,当然,你可以通过修改chr(ascii('a')floor(random() * 26)这个算术来在更广泛的范围内获取随机字符。比如下面这个

Linux下的一些I/O统计工具

| Comments

作为一个 Linux 系统管理员,统计各类 IO 是一项必不可少的工作。其统计工具中 iostat 显然又是最重要的一个统计手段。但是这里 iostat 不是本文的重点,因为这个工具的使用在网络上已经有大量的教程,可以供大家参考。这里主要是想介绍一些其他统计工具以来满足不同的需求。

iostat

iostat 的功能异常强大,输出项也特别多,比如下面这个例子:

1
2
3
Device: rrqm/s  wrqm/s  r/s     w/s    rkB/s    wkB/s    avgrq-sz avgqu-sz   await r_await w_await  svctm  %util

sda     0.00     0.50  173.50   73.50  3076.00   604.00    29.80   149.93    676.58   74.36 2098.15  4.05 100.00

其各项的含义分别是:

PostgreSQL查询优化简介

| Comments

总结一些有关 PostgreSQL查询计划,查询优化的相关内容,比较基础。

SQL 是一种申明性(declared)语言,也就是说,它并不是一种程序。它没有其他编程语言里的流控制语言,比如 while,也无法控制操作顺序,比如有名的”goto”。

SQL 只是描述一个结果,并非过程。

结果一致,但如果过程不同,所带来的系统消耗可谓天差地远。所以所有的 RDBMS 里都需要有查询优化器来获得一条执行代价最小的方式来获取期望的结果。

PostgreSQL里,和查询优化器紧密相连的便是查询计划。

几种常见的NoSQL数据库关键特性列表

| Comments

NoSQL根据不同的数据模型,大致可以分为 4 类,分别是键值对存储(Key-Value Stores),列族存储(Column Families),文档数据库(Document Databases)以及图形数据库(Graph Databases)。四者从容量来讲,依次下降,而从复杂度来说则相反。

下面我根据最近看的一些资料,列出了目前常见的 NoSQL数据库系统的一些主要特性,不一定都正确。另外,后面列了一些参考资料,偏向于 PostgreSQL,个人觉得还不错。

  • Google BigTable

    • 由 Google 开发
    • 闭源产品
    • 通过 SSTable 实现持久化
    • 通过 Chubby实现一致性
    • key-value 存储
  • HBase

    • Apache 基金项目,开发语言为 Java
    • Apache License 2.0 许可
    • Google BigTable的开源版本
    • Hadoop的后端数据库
    • 通过 HTTP REST,使用 JSON协议通信
    • 着重于 CP
    • 通过 memtable/SStable 实现持久化
    • 通过 ZooKeeper实现一致性
    • 支持多主节点(multi-master)

在PostgreSQL里计算一个表的大小

| Comments

PostgreSQL里如何查看或者一个表的大小呢?方法很多,我们可以从简单到复杂看这件事情:

首先创建一个简单表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
wgzhao=# create table t (id int, name text);

CREATE TABLE


-- inserto 100w records

wgzhao=# insert into t select generate_series(1,1000000),'wgzhao_' || generate_series(1,1000000);

INSERT 0 1000000

-- create a index on column id:

wgzhao=# create index idx_t_id on t(id);

CREATE INDEX

--vacuum once

wgzhao=# VACUUM t;

VACUUM

wgzhao=# ANALYZE t;

ANALYZE

简单实现一个基于postgresql的datediff函数

| Comments

在当前 PostgreSQL里,目前还没有一个能够以指定单位返回两个时间差的函数(如果有,请告诉我),比如返回两个时间相差的月份。

我简单的写了一个函数,只是作为一个实现的思路,没有做过多的严禁判断。代码如下:

简单测试如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
wgzhao=# select datediff('year','1970-12-2'::date,current_date);
 datediff
----------
       42
(1 row)

Time: 1.385 ms
wgzhao=# select datediff('month','1970-12-2'::date,current_date);
 datediff
----------
      500
(1 row)

Time: 0.770 ms
wgzhao=# select datediff('day','1970-12-2'::date,current_date);

 datediff
----------
    15232
(1 row)

Time: 0.602 ms
wgzhao=# select version();
     version
---------------------
 PostgreSQL 9.1.4 , 64-bit
(1 row)

Time: 19.968 ms