利用tcpdump抓取mysql sql语句

这个脚本是我之前在网上无意间找个一个利用tcpdump 抓包工具获取mysql流量,并通过过滤把sql 语句输入。

脚本不是很长,但是效果很好。

#!/bin/bash
#this script used montor mysql network traffic.echo sql
tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e '
while(<>) { chomp; next if /^[^ ]+[ ]*$/;
    if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL)/i)
    {
        if (defined $q) { print "$q\n"; }
        $q=$_;
    } else {
        $_ =~ s/^[ \t]+//; $q.=" $_";
    }
}'

下面是执行脚本的输出:

Continue reading

使用 Git Hook 实现网站的自动部署

自动化能解放人类的双手,而且更重要的是,因为按照规定的流程来走,也减少了很多误操作的产生。不知道大家平时都是怎么样更新自己生产环境的代码的,FTP 覆盖旧文件、服务器定时任务去 build 最新的源码,还是有更高级的做法?

目前我在使用 Git Hook 来部署自己的项目。Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用。其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 bash 脚本。 Continue reading

Git中的hooks钩子

Git可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为Client端的钩子和Server端的钩子。
Client 端钩子被operation触发,比如commit,merge等
Server 端钩子被网络动作触发,比如pushed commits。

那么钩子是放在哪的呢?

在.git/hooks/文件夹下。当你init一个仓库的时候,下边会有一些钩子的例子,以.sample结尾。

那么钩子什么时候被执行,Git预定义了触发时机:

ClientSide hooks:

1 pre-commit,当执行commit动作时先执行此hook,可以用此hook做一些检查,比如代码风格检查,或者先跑测试。 Continue reading

使用react-native中的Navigator组件进行页面导航-Navigator篇(android版)

最近对React比较感兴趣,然后爱屋及乌,也研究了下React-Native, 后面简称为RN。

RN刚发布时,Facebook官方说为了快速发布,我们暂时只支持在MacOS上使用, 其他操作系统会慢慢支持。这可让那些用不起Mac的程序员苦逼了。。还好还好,最近RN发布了0.13.0版本了,已经兑现了对windows的支持,所以广大的程序猿们可以在windows上利用RN开发Android应用啦。。至于开发iOS应用,呵呵,还是不要想了,调试还是需要模拟器的嘛。。关于Android环境的搭建可以参考

Windows下搭建React Native Android开发环境》一文,不过作者提到需要修改react-native里面的代码就不必要了,因为那些问题都已经修正了。所以你就大胆的使用的。就几句话:

npm install react-native-cli -g   #安装react-native控制台工具

react-native init AwesomeProject #初始化一个项目

react-native start  #运行服务,用于生成js bundle

ract-native run-android #在手机上或者模拟器上运行android应用

废话少说,进入我们今天的主题:如果在RN中使用Navigator。 首先的问题是:何为Navigator?  从字面意思上来说,就是导航了。通俗点讲,就是说一个页面跳转到另外一个页面,相当于是页面的控制器。如果大家稍微熟悉下Android的开发,就知道,在Android中一个页面就是一个Activity,然后通过Intent,我们可以跳转到另外一个Activity。我们想要的就是这种效果。那我们该怎么办呢? Continue reading

如何理解react中虚拟DOM?

http://www.zhihu.com/question/29504639

中间会有一次用diff生成的补丁操作。这样理解起来很容易的,和git的patch一样。最终render的为原来dom的差异部分DOM,详细见:http://www.infoq.com/cn/articles/react-dom-diff

可见Infoq视频 http://www.infoq.com/cn/presentations/pracitise-of-reactjs

http://study.163.com/course/courseLearn.htm?courseId=1262004#/learn/video?lessonId=1507023&courseId=1262004

linux中 kill USR1和USR2 的区别

USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个

USR1信号将导致以下步骤的发生:
停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。

以上摘自wiki:

http://zh.wikipedia.org/wiki/SIGUSR1%E5%92%8CSIGUSR2

呃,近日发现还有USR2,貌似这个USR1和2都可以用户自定义的,同样摘自上面的wiki:

在POSIX兼容的平台上,SIGUSR1SIGUSR2是发送给一个进程的信号,它表示了用户定义的情况。它们的符号常量在头文件signal.h中定义。在不同的平台上,信号的编号可能发生变化,因此需要使用符号名称。 Continue reading

brew tap介绍

官方介绍:https://github.com/Homebrew/homebrew/wiki/brew-tap

brew 有个默认的仓库,brew tap 你可以看成是第三方的仓库。
这个相信很多人都已经用到过了,安装他人扩展的 brew 服务。由于 brew 和包含的包源都是通过 github 来管理,人为的维护管理,除了自己的源还允许别人的源添加进来。类似与 Ubuntu 的 ppa。好处在于只有我安装规定的方式把包丢到 github 上面就可以用了!

$ brew tap <gihhub_user/repo>

这个命令并没有包含任何的帮助说明,其实它只接受上面的这个参数。

举例说明一下,Mac OS 比较歧视 PHP ,所以每次系统更新都会把常用的开发包(Ruby、Python 等)也顺带着更新到最新版本。(吐槽:Java 都已经被抛弃不再默认安装了),而 brew 居然也不包含 PHP 的包,那怎么办呢?

$ brew tap josegonzalez/php

命令完成之后,执行(当前最新是 php 5.5 版本,请根据需要替换)

$ brew install php55

当我们没有传递任何参数,默认显示已经通过 tap 安装了哪些扩展,为什么我说是通过 tap 呢,因为 brew 其实除了这些自身也用了一些其他扩展,通过下面命令显示:

$ brew ls-taps