0%

张康宗(Smallfrogs)
http://www.kztechs.com

原本这个话题是准备在8个月前写的,但是由于种种原因,一直推迟到现在。今晚(或者说今天凌晨),抽空把程序弄完了,因为只有程序写完以后,这个话题才有实际的价值。

这个话题就是:Windows 目录到底占用了多少真实的硬盘空间?

看到这个问题,我想99%的人都会说:用资源管理器右键点击Windows目录,看看属性不就知道了吗?何必故弄玄虚呢!

但是,我 Smallfrogs 会有那么傻的把一个大家都知道的问题重新翻出来吗?既然提出了这个话题,就有我的道理!请各位耐住性子往下看,看看我们的Microsoft同学又玩了什么样的花活,呵呵。

Read more »

例如: 开放80port
vi /etc/sysconfig/iptables
加入此行:

1
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p --dport 80 -j ACCEPT

指定IP访问指定端口

1
-A RH-Firewall-1-INPUT -s 192.168.1.1 -p tcp -m state --state NEW -m tcp --dport 9201 -j ACCEPT

示例:
1 限制连往本机的telnet单个IP并发连接为2个,超过的连接被拒绝:

1
iptables -I INPUT -p tcp --dport 23 -m iplimit --iplimit-above 2 -j REJECT

2 限制连往本机的web服务,1个C段的IP的并发连接不超过100个,超过的被拒绝:

1
iptables -I INPUT -p tcp --dport 80 -m iplimit --iplimit-above 100 --iplimit-mask 24 -j REJECT

Urchin是google收购的一个日志分析工具。界面跟google analytics是几乎完全一样的。但是google analytics每个月的统计只能在500W PV以内,这个对于稍微有点规模的网站是不可忍受的。所以我们还是需要自己来架设一个urchin 首先需要下载一个urchin6600_linux2.6_kernel.tar.gz 这个是根据自己monitor的系统版本来进行确定的。然后还需要有一个mysql或者postgresql 创建相应的数据库和数据库用户。这里数据库名为urchin,数据库账户为urchin,urchin的账户密码为urchinapassword, urchin账户拥有urchin库的all权限。

1
2
3
root@urchin# mysql -u root -p
mysql> create database urchin character set utf8;
mysql> GRANT ALL ON urchin.* to 'urchin'@'localhost' IDENTIFIED BY 'urchinpassword';

接着使用程序目录下的install.sh脚本进行安装,这里主要是选择安装目录,数据库配置连接等等。

1
./install.sh

安装时,如果MYSQL Server为localhost时,SQL Socket path路径可能为/var/lib/mysql/mysql.sock/tmp/mysql.sock 根据实际情况填写。如果MYSQL Server为远程服务器,填写地址后,则需填写SQL Port。

安装完成后就可以通过下列网址查看urchin。

http://yourserver:9999

修改admin用户的密码,默认密码为:urchin

1
/usr/local/urchin/util/uconf-manager table=uusers action=update ucus_name="admin" ucus_password="123456" key1=ucus_name print=status

这里是把admin用户的密码设置为123456

这样我们就能通过上面的网站看到urchin的界面了。

其他配置:

首先需要一个域名下放置urchin.js这个js代码。这个代码需要修改如下部分。

1
2
3
//-- UTM User Settings
var _udn="liudongkai.com"; //这个是你网站一级目录
var _ugifpath="http://track.liudongkai.com/__utm.gif"; //__utm.gif的地址

track.liudongkai.com 这个最好是独立的域名,这样urchin就不会分析这个域名内其他不相关的日志了。

__utm.gif和urchin.js都在安装文件中存在,根据上面的建议进行修改和放置。

PS:如果你希望直接放在当前域名下,需要apache对于gif这类请求只记录__utm.gif,配置时加上 SetEnvIf Request_URI "^((?!__utm).)*\.gif$" dontlog ,当前当前域名don’t log所配置的内容。

关于日志配置:

默认nginx的日志格式,urchin是无法进行分析的。还必须要做相应的修改后urchin才能进行分析。

1
2
3
log_format urchin '$remote_addr $http_host - [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_cookie"';

默认Apache的日志格式,需要在LogFormat中再添加一中格式定义,或者在原有的combined格式中追加%{Cookie}i 。

1
LogFormat "%h %v %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" urchin

新建配置:

Urchin默认是英文界面,可以在显示中选择中文。基本设置如下:

urchin的原理:就是在所有的页面都会嵌入这个urchin.js来访问那个__utm.gif图片,通过这个来收集用户本地的相关信息来记录到gif图片域名下的日志中,然后urchin就来分析这个日志,所以这个分析结果的内容会比一般的多。

Urchin 参数

Urchin 参数

最近在做Web统计相关的工作,在查资料的同时,顺手找到了GA的原理分析:)

发统计包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
GET http://www.google-analytics.com/__utm.gif?utmwv=1&utmn=1261523910&utmcs=gb2312&utmsr=1400×1050&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=-&utmhn=www.mydll.com&utmr=-&utmp=/gg.htm&utmac=UA-2789145-1&utmcc=__utma%3D251296922.1430927915.1192194210.1192194210.1192194210.1%3B%2B__utmb%3D251296922%3B%2B__utmc%3D251296922%3B%2B__utmz%3D251296922.1192194210.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B HTTP/1.1
Accept: */*
Referer: http://www.mydll.com/gg.htm
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Connection: Keep-Alive
Host: www.google-analytics.com
Pragma: no-cache

HTTP/1.1 200 OK
Pragma: no-cache
Cache-Control: private, no-cache, no-cache=”Set-Cookie”, proxy-revalidate
Expires: Fri, 04 Aug 1978 12:00:00 GMT
Content-Type: image/gif
Server: ucfe
Content-Length: 35
Date: Fri, 12 Oct 2007 13:04:04 GMT
Via: 1.1 HttpSpy
Read more »

SetEnv 指令

说明 设置环境变量
语法 SetEnv env-variable value

SetEnvIf 指令

说明 根据客户端请求属性设置环境变量
语法 SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] …
作用域 server config, virtual host, directory, .htaccess

SetEnvIf指令根据客户端的请求属性设置环境变量。第一个参数attribute必须是下列三种类别之一:

  1. 一个HTTP请求头域(参见RFC2616);例如:Host, User-Agent, Referer, Accept-Language 。可以用一个正则表达式来进行匹配。
  2. 下列请求属性之一:
  • Remote_Host 远程主机名(若可用)
  • Remote_Addr 远程主机IP地址
  • Server_Addr 接收到请求的服务器IP地址(2.0.43及以后版本)
  • Request_Method 所用的请求方法(GET, POST等等)
  • Request_Protocol 请求所使用的协议及其版本(“HTTP/0.9”, “HTTP/1.0”, “HTTP/1.1”等)
  • Request_URI 在HTTP请求行中请求的资源(通常是URL中去除协议、主机以及查询字符串后剩余的部分)。
  1. 列出的与该请求关联的环境变量名字中的一个。这将允许SetEnvIf指令基于预先匹配的结果进行测试。只有那些由较早的SetEnvIf[NoCase]指令定义的环境变量才可以按照这种方式测试。”较早的”意思是它们在更上层的作用域(比如全局范围)中被定义或者在同一作用域中较早出现。只有在请求的属性未能得到匹配并且attribute没有使用正则表达式的时候,环境变量才会被考虑。

如:不记录192.168.7.139的访问日志
首先设置环境变量 SetEnvIf Remote_Addr "192\.168\.7\.139" dontlog
使用上面设置的环境变量
CustomLog "logs/access_log" common env=!dontlog

SetEnvIfNoCase
说明: Sets environment variables based on attributes of the request without respect to case
语法: SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] …
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: FileInfo
状态: Base
模块: mod_setenvif
兼容性: Apache 1.3 and above

The SetEnvIfNoCase is semantically identical to the SetEnvIf directive, and differs only in that the regular expression matching is performed in a case-insensitive manner. For example:
SetEnvIfNoCase Host Apache.Org site=apache
This will cause the site environment variable to be set to “apache” if the HTTP request header field Host: was included and contained Apache.Org, apache.org, or any other combination.
SetEnvIfNoCase 当满足某个条件时,为变量赋值,一般结合其他指令使用。
如:

  1. SetEnvIf Request_URI "/logo(.)+" local_ref=0
    Allow from env=local_ref 当local_ref有值时,可以访问。
  2. SetEnvIfNoCase Request_URI .js$ useless-file
    CustomLog logs/hebgc.com/access.log combined env=!useless-file
    当满足条件时才记录日志。

当VirtualBox 2.1.4升级到2.2.0以后,突然发现虚拟的系统无法使用主机的网络上网了,google了一下,发现很多人碰到这个问题,但没有解决办法,甚至有人认为是VirtualBox的Bug,其实不然。
经过研究发现,2.2.0缺省的不再是Bridge Network方式了,改为NAT,那么我们自己将网络修改回原来2.1.4的桥接方式就可以了。

  1. 首先,用鼠标右键点击“网上邻居”,选择“属性”;

  2. 右键选择VirtualBox的host-only网络链接,选择“属性”;

  3. 缺省的,“VirtualBox Bridged Networking Driver”是没有选中的,选中它,点击“确定”。这时候,会提示安装网络设备;

  4. 不要管提示的内容,点击“仍然继续”。完成后,VirtualBox网络连接重新获取IP地址,图表显示为

  5. 启动VirtualBox,右键选择要修改的虚拟系统,并点击“设置”。

  6. 点击左侧列表中的“网络”选项,可以看到“连接方式”的下拉列表里有好几个选项,默认是NAT,将之改为“Bridge Network”,并点击后面的螺丝刀图标;

  7. 新弹出“桥接网络详情”窗口,如下:

    选择你的本地网络的网卡名称,我的是“Intel(R) 82566DM-2 Gigabit Network Connection”,你的可能不同,记住,不是“VirtualBox Host-only Ethernet Adapter”;如果下面的“Guest MAC Address”为空,点击后面的刷新按钮,随机指定一个MAC地址,点击“OK”按钮即可。

  8. 点击“<虚拟机系统名> 设置”窗口的“OK”按钮,以保存配置,启动虚拟操作系统,看看是不是可以上网了?

其他功能均正常,但音量和亮度的调节无法正常使用,事实上并不是IBM自带HOTKEY的问题,只要安装Lenovo System Interface驱动程序即可,无论音量调节或屏幕亮度全部正常使用

ThinkPad — Lenovo System Interface驱动程序 (Windows Vista/XP) 下载地址:

当前版本号:1.01.0805

发布时间:2009-6-22

http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1217231721126&docTypeID=DOC_TYPE_DRIVER

Linux命令:

1
ps -ef | grep httpd | wc -l

查看Apache的并发请求数及其TCP连接状态:

Linux命令:

1
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

返回结果示例:

  LAST_ACK 5
  SYN_RECV 30
  ESTABLISHED 1597
  FIN_WAIT1 51
  FIN_WAIT2 504
  TIME_WAIT 1057

说明:  
SYN_RECV表示正在等待处理的请求数;
ESTABLISHED表示正常数据传输状态;
TIME_WAIT表示处理完毕,等待超时结束的请求数。

想要恢愎数据库以前的资料,执行:show binlog events;屏幕就开始闪,闪的人眼花,心里烦(那有这么多没有用的破LOG^0^),还是删除一些去吧!

  1. 列出当前的binlog文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    mysql> show binary logs;
    +------------------+-----------+
    | Log_name | File_size |
    +------------------+-----------+
    | mysql-bin.000001 | 150462942 |
    | mysql-bin.000002 | 125 |
    | mysql-bin.000003 | 106 |
    +------------------+-----------+
    3 rows in set (0.00 sec)
  2. 删除bin-log(删除mysql-bin.000003之前的而没有包含mysql-bin.000003)

    1
    2
    mysql> purge binary logs to 'mysql-bin.000003';
    Query OK, 0 rows affected (0.16 sec)
  3. 查询结果(现在只有一条记录了.)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    mysql> show binlog events\G
    *************************** 1. row ***************************
    Log_name: mysql-bin.000003
    Pos: 4
    Event_type: Format_desc
    Server_id: 1
    End_log_pos: 106
    Info: Server ver: 5.1.26-rc-log, Binlog ver: 4
    1 row in set (0.01 sec)

    (mysql-bin.000001和mysql-bin.000002已被删除)

1
2
3
4
5
6
7
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000003 | 106 |
+------------------+-----------+
1 row in set (0.00 sec)

(删除的其它格式运用!)

1
2
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'

用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
例如:

1
2
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00';

清除3天前的 binlog

1
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);

BEFORE变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。MASTER和BINARY是同义词。
如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

要清理日志,需按照以下步骤:

  1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
  2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
  3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
  4. 制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)
  5. 清理所有的日志,但是不包括目标日志我。