Profil de 峰MY-UBUNTU-LIFEPhotosBlogListesPlus Outils Aide

MY-UBUNTU-LIFE

Just me Shift~
Photo 1 sur 19
22 septembre

Use cacti monitoring DiskI/O

Another method, change you configuration with src.rpm.
  • install you source rpm, here is
    • #rpm -ivh net-snmp-5.1.2-11.EL4.7.src.rpm
  • edit you spec file to added "ucd-snmp/diskio" in configure option, here is
    • # vi /usr/src/redhat/SPECS/net-snmp.spec
      -------------------------origion file ---------------------------

      --with-persistent-directory="/var/net-snmp" \
      %ifarch %{ix86} x86_64
      --with-mib-modules="host agentx smux ucd-snmp/lmSensors" \
      %else
      --with-mib-modules="host agentx smux" \
      %endif

      -------------------------change to -------------------------------

      --with-persistent-directory="/var/net-snmp" \
      %ifarch %{ix86} x86_64
      --with-mib-modules="host agentx smux ucd-snmp/lmSensors ucd-snmp/diskio" \
      %else
      --with-mib-modules="host agentx smux ucd-snmp/diskio" \
      %endif
  • build you rpm packeage
    • # rpmbuild -bb net-snmp.spec
  • install the new rpm file
    • # rpm -ivh /usr/src/redhat/RPMS/i386/net-snmp-5.1.2-11.EL4.7.i386.rpm net-snmp-libs-5.1.2-11.EL4.7.i386.rpm
11 septembre

关于磁盘的inode满100%--i节点大爆发

  1. 原因:
    • 通常是发现磁盘没有满但是无法写入文件。提示“no space left on device”
    • 用df -i 查看,应该会发现相应的分区是100%
    • 一般都是crontab的job有问题,造成/var/spool/clientmqueue中产生许多的零碎文件。
  2. 处理方法:
    • 用rm -rf *会不能删除,并会有相应的提示,大意是参数太多。
    • 可以用多种方法,这里提及一个我随便写的,在/var/spool/clientmqueue/下执行命令:“lsattr ./|awk -F"/" '{print $3}'|xargs -i rm -rf {}”用lsattr列出./下面的文件名的属性,用awk取出名字,然后rm -rf。
    • 还有一个方法比较普遍的使用:“find /var/spool/clientmqueue/ -type f -exec rm {} \;”或者在/var/spool/clientmqueue/目录下“find ./ -exec rm {} \;”。
    • 将crontab中没有定向输出的行都在最后加上“> /dev/null 2>&1”,在删除的过程中操作。或者先停止crontab,加上重定向。

9 septembre

UNIX相关硬件信息收集方法

  1. HPUX:
    • 查看系统信息:
      • print_manifest :查看系统信息包括硬件信息,软件信息...
    • 查看CPU信息:
      • [root@NC-XXX-HPUX ~]# machinfo
        CPU info:
          2 Intel(R) Itanium 2 9100 series processors (1.67 GHz, 18 MB)
                  666 MT/s bus, CPU version A1
                  4 logical processors (2 per socket)

        Memory: 8171 MB (7.98 GB)

        Firmware info:
           Firmware revision:  04.11
           FP SWA driver revision: 1.18
           IPMI is supported on this system.
           BMC firmware revision: 5.24

        Platform info:
           Model:                  "ia64 hp server rx2660"
           Machine ID number:      aa7dc4Xb-8a3f-11be-be56-e22794f15fX0
           Machine serial number:  SGH4928XMH

        OS info:
           Nodename:  NC-XXXXXXX
           Release:   HP-UX B.11.31
           Version:   U (unlimited-user license)
           Machine:   ia64
           ID Number: 2812366839
           vmunix _release_version:              
        @(#) $Revision: vmunix:    B.11.31_LR FLAVOR=perf 
    • 查看硬盘信息:
      • vgdisplay -v vg00 :来查看vg00中的配置,包括有哪些LV和PV。
      • lvdisplay -v -k /dev/vg00/lvol4 :查看lv的详细信息,包括LV所有分布的到的PV。
      • bdf :查看分区信息。
      • diskinfo -v /dev/rdsk/c0t0d0 :查看PV的详细信息。
    • 查看硬件信息:(例如内存和硬盘的详细信息)
      • cstm
        map
        sel dev xxx
        info
        il
  2. 未完待续。。。


PHP中调用shell命令的一点注意

  1. escapeshellarg ( string $arg )
    • 可以用到php的安全中,会过滤掉arg中存在的一些特殊字符。在输入的参数中如果包含中文传递给escapeshellarg,会被过滤掉。
  2. escapeshellcmd ( string $command )
    • escapeshellcmd()函数会转义命令中的所有shell元字符来完成工作。这些元字符包括:# & ; ` , | * ? ~ < > ^ ( ) [ ] { } $ \\。
  3. exec ( string $command [, array &$output [, int &$return_var]] )
    • 执行定义的命令command,如果定义数组output的话就会将输出结果传到output中,执行结果的返回值存储在return_var中。
  4. passthru ( string $command [, int &$return_var] )
    • 与exec和system类似,返回的值是raw data,如二进制数据,比如图片。
  5. shell_exec ( string $cmd )
    • 通过shell执行命令cmd,完整的字符串作为返回值。
  6. system ( string $command [, int &$return_var] )
    • 执行命令command后返回值,如果php运行在server模式下,system会试图自动刷新web服务器的输出缓存。
1 septembre

使用rsync的exclude

有些东西脑子里面不清楚就每次用每次查,贴一个出来,帮自己记忆一下。
在用 rsync 的 --exclude-from 选项的时候有千万别忘记加“-C”。
例子:
rsync -avC --exclude-from=centos4.7exclude rsync://ftp.iij.ad.jp/centos/4.7/ ./4.7/
本例中centos4.7exclude文件中写的是
isos
alpha
ia64
s390
s390x
这样包含这些名字的目录就会被完全从rsync的table里面剔除掉,不做同步处理。
24 août

关于http/1.1, 1.0和squid还有CDN

从网上找了一段关于http/1.0在取gzip文件时发生的问题,因为google的爬虫有的时候出现1.0版本,有的时候出现1.1版本,奇怪~~

没办法啦,学习一下吧。


Squid能否正确的处理gzip,完全取决于realserver会否发送正确的Vary:头部。一般来说,反向代理环境里,自己能控制realserver。
而采用Apache这样的标准web服务器,可配置mod_deflate让它发送正确的Vary:头部。这个头部的作用,就是指示squid,应该根据客户端的请求方式不同,返回不同的压缩或非压缩目标。
浏览器请求squid上的某个目标,假设该目标在squid上有压缩过的缓存,该缓存同时包括一个"Vary:"头部(按照RFC 2616协议,对压缩过的内容Apache必须返回该头部给squid)。
Squid会根据缓存里的Vary头部的值和请求头部进行匹配,如果请求头部里包含了Accept-Encoding相应值,则squid返回压缩过的目 标给浏览器。相反,如果请求头部里没有包含Accept-Encoding字段(通常是http/1.0方式),则squid会将请求转发给 realserver。按照标准,Squid不允许发送压缩过的目标拷贝给不接受Encoding的浏览器。
Squid的请求到了realserver,mod_deflate返回非压缩的内容给Squid。这个响应也包含Vary头部,但不是压缩的。 squid拿到这个响应后,更新自己的缓存(squid的缓存目标存储结构是以url为key的哈希,就是同一个url下只能存储一份cache目标), 并将响应返回给客户端。
下一次如果客户的请求又包含了Accept-Encoding字段,squid会根据缓存目标的Vary头部,再去realserver取一份压缩的内容返回给客户端,并更新自己的缓存。
所以,在上述机制下,squid对gzip的兼容没有问题。但是,这里有2个明显的问题:
1. 对某个cache住的目标,一个http/1.0请求可能会导致squid强制更新其缓存。但接下来的另一个http/1.1请求又会导致squid再次更新缓存。这就极大的降低了cache命中率。
2. 某些客户端,如IE6及以下,如果发送http/1.0的请求,realserver会返回没有压缩过的内容,同时包含一个Vary:头部。这些客户端不能处理这个头部,结果就导致目标无法下载。这是IE的bug,我们做不了什么。但碰到这种情况,用户会投诉你。

这实际上取决于squid是否支持http/1.1.squid对http/1.1的兼容性代码还在开发之中.不过squid-2.7版本在这方面已做了不少工作.

如果只想配置squid作为反向代理,那么编译安装最新版的squid-2.7(该版本已包含部分http/1.1协议的补丁),在squid.conf的http_port指令后加多一个关键字http11即可,如:

http_port 80 accel vhost http11 defaultsite=www.mytest.com
这样squid就基本兼容encoding了,可以在apache上配置mod_deflate来使用gzip压缩.
不过这种情况对http/1.0的客户端可能有点问题.要完全兼容http/1.0,需要配置下apache的mod_rewrite,基于 Accept-Encoding头部进行rewrite.如果客户端声称接受encoding,那么就使用mod_deflate来压缩内容.如果客户端 不接受encoding,那么rewrite规则返回302,指示客户端跳转到另一个目录.该目录不过是前述mod_deflate目录的一个符号链接, 但针对该目录没有配置mod_deflate进行压缩.这样就可解决http/1.0客户端的问题


顺便还学了一招:
为什么有的网站能够被Google搜索到,点击链接进去以后却显示“未注册”、“还不是会员”呢?这是一种网站专门针对对搜索引擎优化的技术。 

那么我们也可以伪装成搜索引擎来进入这些页面。我们需要的是修改浏览器的User-Agent值。下面以Internet Explorer为例说明: 

把下列代码保存为 ua.reg,双击导入到注册表中:
 
程序代码:
 
Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent] 
@="Googlebot/2.1" 
"Compatible"="+
http://www.googlebot.com/bot.html"  

这样我们就可以突破一些被封锁的收费内容页面了。Firefox用户可以去下载一个名字为 Agent-Switcher的插件,把User-Agent修改成 Googlebot/2.1 (http://www.googlebot.com/bot.html) 就行了。
12 août

在文本中替换匹配的部分(vi+awk+sed)

vi的引用匹配将所有×50的行中的200换成230
:%s/POSITION \(.50\) 200/POSITION \1 230/g

ls|awk -F'.' '{print "cp "$0,$1"_tw."$2}'|sed -e "s/^/\'/g" -e "s/$/\'/g"|xargs -i bash -c {}

ls|grep -v tw|awk -F'.' '{print "cp "$0,$1"_bj."$2}'|sed -e "s/^/\'/g" -e "s/$/\'/g"|xargs -i bash -c {}

ll|grep apache|awk '{print "rm -rf "$NF}'|sed -e "s/^/\'/g" -e "s/$/\'/g"|xargs -i bash -c {}

ls|awk -F"." '{print "echo \""$1" 0 0\">",$0}'|sed -e "s/$/\'/g" -e "s/^/\'/g"|xargs -i bash -c {}; sed -i 's/ /    /g' *.txt

ll|grep bj_tw|awk '{print "rm -rf "$NF}'|sed -e "s/^/\'/g" -e "s/$/\'/g"|xargs -i bash -c {}