利用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中虚拟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

 

mac下安装PHP提示configure: error: Cannot find OpenSSL’s 的解决办法

在mac 10.11.2 下安装PHP7的时候,在./configure的时候,提示

checking for strftime… (cached) yes
checking whether to enable LIBXML support… yes
checking libxml2 install dir… /usr
checking for xml2-config path… /usr/bin/xml2-config
checking whether libxml build works… yes
checking for OpenSSL support… yes
checking for Kerberos support… no
checking whether to use system default cipher list instead of hardcoded value… no
checking for RAND_egd… no
checking for pkg-config… no
configure: error: Cannot find OpenSSL’s <evp.h>

错误,解决办法

brew install openssl

安装xcode命令行

xcode-select --install

重启,再次安装即可。

如果还是不行的话,建议从opensll官方网站下载源码,手动安装一下。

如果还是不行的话,手动指定一下 openssl 的路径

--with-openssl=/usr/local/opt/ssl