November 16, 2010
shell test操作运算符
"4.4 控制结构\n在shell脚本中,使用控制结构就可以控制Linux命令的执行。使用控制结构,可以重复执行命令,或者选择特定的命令。控制结构包含两个主要的组件:测试操作(test)和命令。如果测试操作成功,则命令就会执行。这样的话,就可以使用控制结构来决定是否执行选定的命令。\n存在两种不同类型的控制结构:循环和条件。循环结构会重复执行命令,而条件结构会在特定条件满足时执行命令。\nBASH Shell有三种循环控制结构:while、for和for-in,两种条件控制结构:if和case。控制结构把Linux命令执行结果作为测试。\n所有的Linux命令在执行结束后都会返回一个退出状态。如果某命令成功执行,退出状态将是0。如果因为某种原因该命令执行失败,则退出状态是表示失败类型的一个正值。控制结构会检查Linux命令的退出状态是0,还是其他值。对于if和while控制结构,如果退出状态是0,则说明该命令被成功执行,控制结构会继续。\n4.4.1 test操作\n借助于test命令,可以比较整数、字符串,甚至执行逻辑操作。命令由关键字test,以及被比较值组成;被比较数值之间使用一个选项分隔开, …"
November 16, 2010
grep用法详解:grep与正则表达式
"**首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!**正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;\n1基础正则表达式grep 工具,以前介绍过。\ngrep -[acinv] ‘搜索内容串‘ filename\n-a 以文本文件方式搜索 -c 计算找到的符合行的次数 -i 忽略大小写 -n 顺便输出行号 -v 反向选择,即显示不包含匹配文本的所有行 -h 查询多文件时不显示文件名。 -l 查询多文件时只输出包含匹配字符的文件名。 -s 不显示不存在或无匹配文本的错误信息。 grep命令加- E参数,这一扩展允许使用扩展模式匹配。\n**其中搜索串可以是正则表达式!**grep: 要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。\n$ ls -l | grep ‘^a’ 通过管道过滤ls -l输出的内容,只显示以a开头的行。\n$ grep …"
November 12, 2010
nginx location基础
"基本语法\nlocation [=|~|~*|^~] /uri/ { … }\n= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。\n~ 为区分大小写匹配\n~* 为不区分大小写匹配\n!~和!~*分别为区分大小写不匹配及不区分大小写不匹配\n^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。\n例如:\nlocation = / { # 只匹配 / 查询。\nlocation / { # 匹配任何查询,因为所有请求都已 / 开头。但正则表达式规则和长的块规则将被优先和查询匹配。\nlocation ^~ /images/ { # 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。\nlocation ~* .(gif|jpg|jpeg)$ { # 匹配任何以 gif、jpg 或 jpeg 结尾的请求。\n++ 文件及目录匹配\n-f和!-f用来判断是否存在文件\n-d和!-d用来判断是否存在目录\n-e和!-e用来判断是否存在文件或目录\n-x和!-x用来判断文件是否可执行\n++ 一些可用的全局变量\n$args …"
November 12, 2010
nginx配置文件中的location中文详解
"location\n语法:location [=|~|~*|^~] /uri/ { … } 默认:否\n上下文:server\n这个指令随URL不同而接受不同的结构。你可以配置使用常规字符串和正则表达式。如果使用正则表达式,你必须使用 ~* 前缀选择不区分大小写的匹配或者 ~ 选择区分大小写的匹配。\n确定 哪个location 指令匹配一个特定指令,常规字符串第一个测试。常规字符串匹配请求的开始部分并且区分大小写,最明确的匹配将会被使用(查看下文明白 nginx 怎么确定它)。然后正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。如果没有找到匹配的正则表达式,使用常规字符串的结果。\n有两个方法修改这个行为。第一个方法是使用 “=”前缀,将只执行严格匹配。如果这个查询匹配,那么将停止搜索并立即处理这个请求。例子:如果经常发生”/”请求,那么使用 “location = /” 将加速处理这个请求。\n第二个是使用 ^~ 前缀。如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。\n而且它重要在于 NGINX 做比较没有 URL 编码,所以如果 …"
November 12, 2010
nginx下禁止目录运行php脚本
"为了安全起见,我们一般会对上传目录禁止运行php脚本\n在 apache 下面我们可以通过:\nphp_flag engine off\n的方式来来禁用目录下文件php执行权限。\n那么在 nginx 里面同样可以实现这种方法,那就是location的优先匹配,关于location可以参考我之前的一批文章http://226617.cn/archives/392.htm\n这里简单就举个例子\nlocation ^~ /attachments/\n{\naccess_log off;\n}\n这样 attachments这个目录 就不会再去跳转给fastcgi去执行php了.这里利用了nginx下location指令的处理顺序优先级特点.\n但上面的方法只能算一种技巧,一般不这样设置,正确的方法为:\nlocation /upload/ {\nlocation ~ .*.(php)?$\n{\ndeny all;\n}\n}\n而对于多个目录的话,可以一起进行限定:\nlocation ~* ^/(attachments|images)/.*.(php|php5)$\n{\ndeny all;\n}\n注意这段secion一定要放 …"
November 11, 2010
分布式数据库拆表拆库的常用策略
"在大容量,高负荷的web系统中,对数据库进行一系列拆分,可有效提升数据库容量和性能。在初学程序的早期,程序员通常都喜欢按传统数据库设计模式,设计为单库和单一功能表的结构,这样的结构在数据量和并发量达到一定程度之后,会出现严重性能问题和维护问题。在出现问题的时候才着手进行优化,会非常痛苦,所以应该在系统架设之初就考虑好之后会出现的问题。\n目前有些数据库策略是采用单库结构,然后通过同步分发到数台服务器实现读写分离。个人觉得这样的策略非常笨拙,还是想办法将其分隔开来好,否则每台机器的内存都很容易超支。\n一般只对数据量比较大的表进行拆分,这应该没有什么异议;还有一种是有可能会进行维护的比较重要的表,比如文章目录表,如果有从其它系统倒数据进来的可能的话,也要拆掉,不然倒数据时一不小心把目录表弄坏了,发现忘了备份,那真是欲哭无泪。\n下面来分析一下:\n一、时间结构\n如果业务系统对时效性较高,比如新闻发布系统的文章表,可以把数据库设计成时间结构,按时间分有几种结构:\n平板式 表类似: article_200901 article_200902 article_200903\n用年来分还是用月可自定,但用 …"
November 11, 2010
linux挂载新硬盘,开机自动挂载
"Linux的硬盘识别:\n2.6 kernel以后,linux会将识别到的硬件设备,在/dev/下建立相应的设备文件.如:\nsda 表示第1块SCSI硬盘.# V, z b, }2 F7 u’ |\nhda 表示第1块IDE硬盘(即连接在第1个IDE接口的Master口上)\nscd0 表示第1个USB光驱.\n当添加了新硬盘后,在/dev目录下会有相应的设备文件产生.cciss的硬盘是个例外,它的设备文件在/dev/cciss/目录下.一般使用”fdisk -l”命令可以列出系统中当前连接的硬盘设备和分区信息.新硬盘没有分区信息,则只显示硬盘大小信息.\n1.关闭服务器加上新硬盘\n2.启动服务器,以root用户登录\n3.查看硬盘信息\n#fdisk -l\nDisk /dev/sda: 146.1 GB, 146163105792 bytes\n255 heads, 63 sectors/track, 17769 cylinders\nUnits = cylinders of 16065 * 512 = 8225280 bytes\nDevice Boot Start End Blocks Id …"
November 10, 2010
用户行为分析-使用JS和_trackPageview函数从时间维度监测页面表现
"为什么要从时间维度对页面进行监测?\n网站分析 中有一个重要的指标:Bounce rate。定义是当用户在进入你网站的第一个页面后没有点击任何链接就离开了。假设两个用户同时进入网站的第一个页面后,一个什么都没有看就马上离开了,而另一个在阅读了页面上的内容并在Action按钮上忧郁了半天,最后离开了。那么这两个用户在Bounce rate里看起来没有区别。而实际上第二个用户比第一个用户更有可能被转化。而如果两个用户来自不同的渠道,那么第二个渠道相对第一个渠道更有一些价值。\n在GA的报告中目前只提供两个时间维度:平均 页面停留时间 和平均 网站停留时间。使用JS事件与_trackPageview函数相配合,我们可以看到网页在时间维度上的表现,并获得更多详细的用户与网站互动的时间数据(被计算在Bounce rate内的非点击行为数据)。\n1通过持续时间判断用户行为的有效性 上一篇文章的最后一个策略中提到,可以使用_trackPageview函数与JS的onmouseover事件配合。当用户将鼠标移到某个焦点图或按钮上时进行记录。但有一个问题就是收集到的大部分数据可能是用户无意识的行为(如鼠标划 …"
November 9, 2010
网络七层协议及负载均衡
"根据OSI模型把网络通信的工作分为七层.一至四层被认为是低层,这些层与数据移动密切相关.五至七层是高层,包含应用程序级的数据.每一层负责一项具体的工作,然后把数据传送到下一层.由低到高具体分为:物理层.数据链路层,网络层,传输层,会话层,表示层和应用层.\nOSI模型的最低层或第一层:物理层\n物理层包含物理连网网媒介,实际上就是布线,光纤,网卡和其它用来把两台网络通信设备连接在一起的设施.它规定了激活,维持,关闭通信端之间的机械特性,电气特性,功能特性及过程特性.虽然物理层不提供纠错服务,但它能够设定数据传输速率并监测数据出错率.\nOSI模型的第二层:数据链路层\n数据链路层的主要作用是控制网络层与物理层之间的通信.它保证了数据在不可靠的物理线路上进行可靠的传递.它把从网络层接收到的数据侵害成特定的可被牧师层传输的帧,保证了传输的可靠性.它的主要作用包括:物理地址寻址,数据的成帧,流量控制,数据的栓错,重发等.它是独立于网络层和物理层的,工作时无须关心计算机是否在运行软件还是其它操作. 数据链路层协议主要有:SDLC,DHLC,PPP,STP,帧中继等.\nOSI模型的第三层:网络层\n很多用 …"
November 9, 2010
Nginx中的upstream
"Nginx中upstream有以下几种方式:\n1、轮询(weight=1) 默认选项,当weight不指定时,各服务器weight相同, 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。\n[shell]upstream bakend { server 192.168.1.10; server 192.168.1.11; } [/shell]\n2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 如果后端服务器down掉,能自动剔除。 比如下面配置,则1.11服务器的访问量为1.10服务器的两倍。\n[shell]upstream bakend { server 192.168.1.10 weight=1; server 192.168.1.11 weight=2; }[/shell]\n3、ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。 如果后端服务器down掉,要手工down掉。\n[shell]upstream …"