【工作经历:阿里巴巴搜索技术研发中心QA ,百度新产品测试部QA】 【领域:测试分析,自动化测试,性能测试,安全测试 】 【个人定位:高级测试工程师+培训师+领域产品专家】

发布新日志

  • hadoop单机版环境搭建

    2010-03-30 23:58:47

    项目中需要用到了hadoop,原有的hadoop环境因为其他原因,有些冲突。自己就重新搭建了一套。
    也为了以后自己可以更方便的测试。

    1、下载hadoop。这个在我之前的函数库中已经封装好了地址。直接hadoop_download 即可。

    hadoop_download ()
    {
        rsa `hostname -a`;
        wget 'http://labs.xiaonei.com/apache-mirror/hadoop/core/hadoop-0.18.3/hadoop-0.18.3.tar.gz' 'http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/
    USD/VerifyItem-Start/jdk-6u14-linux-x64.bin?BundledLineItemUUID=Ev1IBe.p.mYAAAEilUYHlhw5&OrderID=AvVIBe.p208AAAEigkYHlhw5&ProductID=tPxIBe.oz2IAAAEhmh0zLjfT&FileName=/jdk-6u14-l
    inux-x64.bin';
        tar zxvf hadoop-0.18.3.tar.gz;
        cd hadoop-0.18.3;
        [[ -z $JAVA_HOME ]] && print please set JAVA_HOME
    }


    2、设置单机版的配置。在conf/hadoop-site.xml中,添加如下的配置


    <configuration>

    <property>

        <name>fs.default.name</name>

        <value>hdfs://localhost:9000</value>

      </property>

      <property>

        <name>mapred.job.tracker</name>

        <value>hdfs://localhost:9001</value>

      </property>

      <property>

        <name>dfs.replication</name>

        <value>1</value>

      </property>

    </configuration>




    在conf/hadoop-env.sh中,添加export JAVA_HOME=jdk的路径。

    3、准备工作

    把本机打通认证。就是让自己登陆自己不需要密码提示。使用函数库中的rsa 本机ip   即可。
    格式化namenode
    bin/hadoop namenode –format

    4、启动
    bin/start-all.sh  即可。
    不过一般,可能会遇到一些奇怪的错误。比如


    INFO hdfs.DFSClient: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File <filename> could only be replicated to 0 nodes, instead of 1

    当初遇到这种情况的时候,着实郁闷了一番。google无果。有人提出了方法,但是也不对。
    后来考虑了下,可能是本机有其他的hadoop环境也在运行,可能是公用的东西有冲突。一般是/tmp下的文件。

    我直接删除了/tmp下的相关文件,修改了所有的端口。然后重新格式化namenode。
    然后重新启动。

    结果OK。解决这个问题,是本次最大的收获。。




    4、多机版的配置
    触类旁通吧,修改相关的配置文件即可。做测试的话,单机版就OK.不够的话,就需要再conf/slave里面多添加几列ip吧。




    5、若干问题记录。
    hadoop的slave文件,是个鸡肋。系统读取相关的资源,是从hadoop-default.xml与hadoop-site.xml中读取的。配置好这两个文件是关键。
    master,与slave只不过是client端使用。
    启动后可以通过web界面去访问相关的信息,查看是否正常工作。
    访问50070即可。




  • linux下文件传输的简便方法

    2009-11-13 00:29:51

    作为linux下的工作人员,我今天不得不感到羞愧。
    忙于工作,写报告,回复邮件,频繁点击鼠标,把手指点肿了。

    今天要和北京的同事传送一些文件,我可以ping通他们的服务器,但是却无法登陆,因为ssh受限了。
    我不好意思让他sudo去搞系统的一些东西,就开始想各种办法尝试下。

    第一次尝试,让他使用apache,搭建web服务,结果他们机器上没有apache
    本来计划写个自动下载,安装,运行apache的脚本,不过去官方网站,竟然下载失败。真是晕了。
    一想太麻烦就放弃了。

    第二次尝试,让他执行  python -m CGIHTTPServer
    这个命令调用python去开启http服务,很简单实用。
    结果他的机器python 版本太落后,没有 CGIHTTPServer 模块。
    然后疯狂思考,是否perl也可以一句话搭建web服务,转身问身后的同事,也不清楚。放弃。
    搜索了下,也没有太多mini型的服务器,或者自带的命令。
    rsync,nfs也想了下,太麻烦,放弃了。
    尝试了其他的用python编写的脚本,貌似在低版本上也不能运行。


    第三次尝试,nc -l  -v -p 8000 < 数据文件
    我在本地通过wget去访问,成功。
    而且这种方式出奇的快,比scp要快很多。

    不错的几次尝试,传输文件其实不用那么麻烦的,不一定非要知道对方的帐号与密码。





  • 迅雷今天发生了更新失误

    2009-08-02 18:06:02

    今天利用迅雷搜索一些资料的时候,意外发现迅雷个别的页面出错了。
    错误的页面只出现了十分钟左右就消失了。

    第一个是问题是首页的搜索页面。如果输入“刘青云”,就进入了结果页面,点击“第二页”,就会发现,上面的搜索栏里的内容竟然变成了“刘青亿page=2”,看来是代码级别的错误。应该是更新代码的时候,逻辑出错导致的。因为这个问题修复的比较快,我没有截图下来。


    第二个是分类页面。如下图。页面的解析出错,导致直接报出了迅雷网站的整个虚拟目录结构。是文件挪移的时候,路径没有找到导致了这个错误。这些重要信息,这么轻易就暴露了。
    看来今天是迅雷搞升级导致了。


  • Bash构造测试用数据

    2009-07-22 23:24:16

    最近要进行灰盒测试。测试一个hash函数。为了方便遍历大多数的数据分支,就写了一个bash 函数用于生成数据。
    后来发现很有用,就共享出来,希望对大家有帮助。



    x=' ( a b c d e f g h i x y z , ! @ $ % ^ &  ( ) _ _ + | < > ? ) : " { } [ ]' #构造随机的字符串的每个字符的范围
    for((i=0;i<1000;i++));do data_bylen $i $x;done > data  #写入1000个字符串到数据文件。
    while read line ;do ../../bin/SHash $line|| print $line;done < *data  #调用程序去处理。

    不过数据case不全,我只是举个例子而已。用来生成数据还是蛮有用的。

    两种用法
    data_bylen 10 a   生成10个a
    data_bylen 10 a b c  生成 10 个由 a b c随机字母组成的字符串。


    未来几天,打算精心构造一批生成数据的bash函数,来方便测试。以前手工测试时候总结的数据类型,终于可以派上用场了。数据生成的技术含量也不少,攻关下。



    [huangysh@qa16 SHash]$ qahelp data_bylen
    =========================
    :<<data_bylen_help
    data_bylen size meta_string
    data_bylen size meta_string_list
    data_bylen 10 a
    data_bylen 10 a b c
    data_bylen_help
    =========================

    ========source code=========
    data_bylen is a function
    data_bylen ()
    {
        unset meta_string;
        meta_string=(${*:2});
        local size=$1;
        local i;
        for ((i=1 ; i<=size ; i++))
        do
            random_num=$((RANDOM%($#-1)));
            printf "%s" ${meta_string[*]:$random_num:1};
        done;
        echo
    }
    ============================




  • bash登陆旺旺尝试(二)

    2009-07-17 22:30:10

    犯了个错误,我低估了阿里旺旺网页版的登录过程。
    发现中间的登录过程和cookie传输有不少的暗桩。

    重新翻看了curl的官方帮助,检查下一遍,确认自己没有用过。因为我发现网上很多人写的curl教程,都不是太正确。个别的参数理解错误了,比如-D -b -c -F -H等涉及cookie的参数。

    因为之前我精简了部分的登录过程,导致了cookie的值不正确,而且发到网页版的服务器时,压根没有把cookie加上。使用-b 把从firefox中获得的cookie搞上,就没有问题。看来是cookie处理的过程,我漏掉了部分细节。


    使用commview去抓包。得到了发消息的全过程。暂时没有发现cookie的诀窍。
    打算使用curl一步步的模拟,把所有的过程都弄上。看看能不能得到最终的cookie。
    又搞了2个小时,无果。
    最郁闷的是,淘宝限制了登陆次数的常数,搞得我试验了几次后,就被封ip了。
    不过curl倒是各个功能都尝试了一遍。算是有些收获吧。有时间再弄。

    下一步要解决的问题。

    1、cookie的生成与传输过程揭秘。
    2、绕过验证码发送消息。希望旺旺在这方面有漏洞可钻。



    摘录一个数据。纪念下。



    ..POST /wangwang/webwwtb HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Referer: http://webwwtb.im.alisoft.com/wangwang/webww.htm?
    Content-Type: application/x-www-form-urlencoded
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
    Host: webwwtb.im.alisoft.com
    Content-Length: 157
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: _nk_=jdAj1Llo632cxxpnzH1TFMI=; CHECKCODEcnalichnhuangseven=e82820ef17065bb6ac9ae9d511af31331247835695553; pmt0=4hiYirj/b8J4Jh8Ely2wQZ33+1YQTkxx346srLHmAIsx+Fjzgb2IlJebwvJL45xjbp3KYUD4+yFHq+F/whAKofg5oUWmyKVC1qw9vBINOJCP5vWwjyX75vApADIGqESv+lmfAJKIDLz6Gza0QnkrfzaSaRa2wtcXA7eI6F8klsV/0VyzQkwh4+I2rPVtQjhdIIIz3El8nhSU9BRKbjkOiN06VdLmHTML3CTdV+8Z6OjIo3b0KbHD2TkmiSlOP+07/dQXA5E0uQTmVwyKZO27eEQCs4p8gfIFm5+DDOMFqTT4c1MXZ47P7w==; cnalichnhuangseven_chatcard=; cntaobaosihanjishu_chatcard=; __last_login_ver__=; cnalichnhuangseven=chs; cntaobaobst_seven=chs; cntaobaobst_seven_chatcard=; JSESSIONID=XycjaKLKIPhdBUmy; tmp0=Ob4fcTZqYWqQ+7aOyNUdFtR0TnLmXcEjEAGGE3owBt/qZifBrdNyWnVGYA1pVxuG6lxNCdnhSdbVCy7/3k1xlk7JGn+bDhW3Dtf5W+HJJPcsc1n0JLQoLFSia6djwSxz8W9FwYD9/mfhiCKAJuLoc0HrvD5AMFs+2uywV73cfLRGbxWpFpqjGsF815bRkwOat4h3iuLP8jTO456BaKrXxSqeOcZrs7tBZ0z0OR9JurutNZValPHHJJd2tALmeH9KcEFGVZMtPzRG2+nzACWEodzCw7LWMYkiG3gEGSDwKarcLQG868is5HgoZw8R3yAQ7Uejuc5ZdzZiJ9i9HELgrCt8gxten9rs9gdB/xCk7Kpd3MyvZMYlzSmQeph9K2//8NMp+vCn2IfVBCL5auR8zi7uTyswUY64QFQ7EYiwbS3etYI84Wt72xkhc5GrfgKTYXT2heCeFJwWjr6iNj5M2x6BrhZMmuXJ+3b5Pm7WDSYc0Cy3MHbFT8txDws8IFa+PgxiG81Ew9qwQyf45jDECA==; __last_login_ww__=cnalichnhuangseven; ystat_bc_648568=3947965907669682758; lastUrl25939996cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D25939996%26imAppId%3D19437%26appInstanceId%3D; lastApp25939996cnalichnhuangseven=19437; lastUrl29130588cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D29130588%26imAppId%3D19437%26appInstanceId%3DTRIBF3DAB36A64255961B686280780515DBE; lastApp29130588cnalichnhuangseven=19437; lastUrl10435618cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D10435618%26imAppId%3D19437%26appInstanceId%3D; lastApp10435618cnalichnhuangseven=19437; lastUrl498010cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D498010%26imAppId%3D19437%26appInstanceId%3D; lastApp498010cnalichnhuangseven=19437; lastUrl52198947cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D52198947%26imAppId%3D19450%26appInstanceId%3D; lastApp52198947cnalichnhuangseven=19450; lastUrl32213393cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D32213393%26imAppId%3D19450%26appInstanceId%3D; lastApp32213393cnalichnhuangseven=19450; lastUrl26596140cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D26596140%26imAppId%3D19437%26appInstanceId%3D; lastApp26596140cnalichnhuangseven=19437; lastUrl93347296cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D93347296%26imAppId%3D19450%26appInstanceId%3DTRIB5A31A85045F86C6DD010629BB594FEF9; lastApp93347296cnalichnhuangseven=19450; lastUrl34066799cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D34066799%26imAppId%3D19437%26appInstanceId%3DTRIBA4FC65C191F7BB122183A980AB8D9E8C; lastApp34066799cnalichnhuangseven=19437; lastUrl29980269cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D29980269%26imAppId%3D19437%26appInstanceId%3D; lastApp29980269cnalichnhuangseven=19437; lastUrl2513149cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D2513149%26imAppId%3D19437%26appInstanceId%3D; lastApp2513149cnalichnhuangseven=19437; lastUrl7754668cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D7754668%26imAppId%3D19437%26appInstanceId%3DTRIB6FC620DC9CF8C76360DE1CCD9B2362F7; lastApp7754668cnalichnhuangseven=19437; lastUrl14117160cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D14117160%26imAppId%3D19437%26appInstanceId%3D; lastApp14117160cnalichnhuangseven=19437; lastUrl106973556cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D106973556%26imAppId%3D19437%26appInstanceId%3D; lastApp106973556cnalichnhuangseven=19437; lastUrl35837690cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D35837690%26imAppId%3D19450%26appInstanceId%3D; lastApp35837690cnalichnhuangseven=19450; lastUrl58870050cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D58870050%26imAppId%3D19450%26appInstanceId%3D; lastApp58870050cnalichnhuangseven=19450; lastUrl104689323cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D104689323%26imAppId%3D19450%26appInstanceId%3D; lastApp104689323cnalichnhuangseven=19450; lastUrl9568809cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D9568809%26imAppId%3D19450%26appInstanceId%3D; lastApp9568809cnalichnhuangseven=19450; lstat_bc_1167722=11498438611695084407; lastUrl31819614cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D31819614%26imAppId%3D19450%26appInstanceId%3D; lastApp31819614cnalichnhuangseven=19450; ali_apache_id=121.0.29.226.1247210949454.6; wwka=1247835684812; JSESSIONID=43D68A49E4900A4A1B7792288AECFECD

    act=doSendMsg&msgId=1247835685968&msg=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&toUid=cnalichnhuangseven&kp=1247835685968HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    X-Powered-By: Servlet 2.4; JBoss-4.0.3SP1 (build: CVSTag=JBoss_4_0_3_SP1 date=200510231054)/Tomcat-5.5
    Cache-Control: no-cache
    Set-Cookie: wwka=1247835685968; Path=/
    Set-Cookie: CHECKCODEcnalichnhuangseven=512277c03d37a1266d07f7cbe975c9601247835700494
    Content-Type: text/html;charset=UTF-8
    Content-Length: 133
    Date: Fri, 17 Jul 2009 13:01:39 GMT

    OK.1247835685968.cnalichnhuangseven.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.2009-07-17 21:01:40
  • bash登陆旺旺尝试(一)

    2009-07-17 01:57:37

    想写个脚本,可以通过旺旺来发送消息给特定的用户。
    因为旺旺有网页版,所以这是首选网页版。
    使用curl去登陆尝试,不过发现curl貌似没有把cookie加到后面的请求中。
    而且发现旺旺网页版的cookie是一直变动的。消息的id也是变动的。
    折腾了很久,就是没有发送成功。


    后来使用大鲨鱼去监控阿里旺旺软件的tcpsocket通信信息,结果发现也是挺繁琐的。就还是放弃了。重新回到网页版上。

    研究了2个小时,啥也没有成功,郁闷,有机会再搞。


    发现了旺旺上线的一个关键数据包。


    http://webwwtb.im.alisoft.com/wangwang/webwwtb

    POST /wangwang/webwwtb HTTP/1.1
    Host: webwwtb.im.alisoft.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Referer: http://webwwtb.im.alisoft.com/wangwang/webww.htm?
    Content-Length: 34
    Cookie: ali_apache_id=121.0.29.225.81881387989548.0; __last_login_ver__=; pmt0=YyBjVg985K5R8PDsXx05O5paYQYVWV4OrzmPbFzZqbjSp0/4JSPXZYcJcjjmfMzsGlDl5TtLtXbqTL4NRpBDV7YsyRySV0286tqpwuJUerm3qVzV/Whrju4Bs2sXD3W2Rf0MESlIFFrqe9jEbUIN5aP4PK0Go7xKJDmLvKN4TENBH49D0sOcGmooi4B7USzlOXb3AxpJ/oJtYn9YgNJFXS0vccM6AFVO5o/oI3xKF++wlxqowNGVlQMH74vwpTVa6qsUY3rexnyFPid+gtXe/9W+XVRdE1c6i2snVAiL4lPDY2QfN9tamQ==; wwka=1; JSESSIONID=D1460AD3356C09F885EF8680A635BC48; JSESSIONID=r5bTs1DkoY+pD7JT; tmp0=tWsPnX2H3JjJ8uXv6vdgbxrHOc8/UF+1Eg+iYr+O5jJgw/Sw/5UqwlJ+lIUHAIqMiVCQPceNsinlQxJeNXA2XyO1piezoUuLjIq91oYSlV/vfFC9oxQmtQ3gBwhS7uu50xkY8bMjdrYEg+Esv560i7VkuZsG0RUUs8qKDodCfYDufO+neuRRne86GEbB2PeiSpDt5cJ8qr+3eedq8xFWsUaexT8g6UWROFEpEt2oStBJicTuzUet/5cnL2HbNlXx9T7FhJsjJqi0uIqFSMJf+mGqogdxO/8OmQxLjwCrFU5lL4VjmUkvjl4soCXYyP6qwVDRQbOKaoXe1O9fJeI6ewpTsYbFFRRLoWC8SYuw0J4cCuvIe5fIsaE5zGIBz3xFgv9po1+j2DvR7ySJ/poZB86vVO+olVgjGiBMi4NYyNKuF8AaVFHoMcYW4TrWb4grcyYx6EOplJfqfpjGRpkUiAV3OQKUbd/olpum9kI0eTOKOZrF+aGy3eLSJLU7m1FZiYSwYzxDAsIwWhkj3CyMzg==
    Pragma: no-cache
    Cache-Control: no-cache
    act=doCheckStatus&kp=1247765958929


    HTTP/1.x 200 OK
    Server: Apache-Coyote/1.1
    X-Powered-By: Servlet 2.4; JBoss-4.0.3SP1 (build: CVSTag=JBoss_4_0_3_SP1 date=200510231054)/Tomcat-5.5
    Cache-Control: no-cache
    Set-Cookie: wwka=1247765958929; Path=/
    Content-Type: text/html;charset=UTF-8
    Content-Length: 24
    Date: Thu, 16 Jul 2009 17:39:33 GMT






    登陆网页版旺旺的函数代码如下。cookie没有处理好,下一步要 试验curl的cookie功能了。

    wangwang()
    {
        curl -v -c /tmp/ww.txt  -d 'TPL_username=xxxxx&TPL_password=xxxxxxx&Submit=%B5%C7+%C2%BC&actionForStable=post_user_action&action=Authenticator&TPL_redirect_url=&_oooo_=&event_submit_do_login=anything&abtest=&pstrong=1&from=&yparam=&done=' 'http://member1.taobao.com/member/login.jhtml'
        curl -v -b /tmp/ww.txt  -c /tmp/ww.txt  'http://webwwtb.im.alisoft.com/wangwang/webww.htm'
        curl -v -b /tmp/ww.txt   -c /tmp/ww.txt  -d 'act=doCheckStatus&kp='`date +%s`000  'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
        curl -v -b /tmp/ww.txt   -c /tmp/ww.txt   -d 'act=doGetActiveDegree'  'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
        curl -v -b /tmp/ww.txt   -c /tmp/ww.txt   -d 'act=doGetActiveDegree'  'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
        curl -v -b /tmp/ww.txt   -c /tmp/ww.txt   -d 'act=doGetActiveDegree'  'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
        curl -v -b /tmp/ww.txt  -c /tmp/ww.txt   -d 'act=doCheckStatus&kp='`date +%s`000  'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
        while :
        do
            read -t 1 && break
            #curl -v -b /tmp/ww.txt  -d 'act=doCheckStatus&kp='`date +%s`000  'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
            curl -v -b /tmp/ww.txt   -c /tmp/ww.txt   -d 'act=doKeepAlive&kp='`date +%s`000  'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
            curl -v -b /tmp/ww.txt   -c /tmp/ww.txt  -d 'act=doGetActiveDegree'  'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
            curl -v -b /tmp/ww.txt  -c /tmp/ww.txt   -d 'act=doGetActiveDegree'  'http://webwwtb.im.alisoft.com/wangwang/webwwtb'       
        done
        curl -v -b /tmp/ww.txt  -d 'act=doSendMsg&msgId=1247756217652&msg=ffffffffffffffffffffffffffffffffffffffffffff&toUid=cnalichnhuangseven&kp=1247756217653' 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'

    }
  • 黑客帝国中使用linux的片段

    2009-07-05 18:38:20

    昨天看了一晚上的《黑客帝国》,我不太喜欢这个电影,主要是里面的武打动作太做作。
    把各国的武术都模仿了一边,全是邯郸学步的花架子。

    看这部电影,是为了找里面的一段视频。就是女主角使用nmap+sshnuke入侵母体的电厂系统。
    我想截取这段视频,用来激励下一期的学员。还好,看到深夜两点,终于捕获了那段珍贵的视频。


    截图了几张。分享下。









  • Linux下共享screen进行协作

    2009-06-30 20:23:43

    平时工作,同事之间,难免会遇到一些问题,进行求助。
    如果碰巧工作地点不在一地,那么就非常的不便。
    尤其是新手,根本无法把问题描述清楚,让buddy比较郁闷。
    另外,工作中,也的确有需要一起配合工作,比如实现同步的教学之类的。

    为了解决这个平时的工作小问题。我总结了以下两个方法。

    1、使用screen。
    screen是个管理员非常重要的工具,它可以让保存session,保留程序的执行环境,非常的方便。
    screen是可以进行多用户连接的。不过方法比较麻烦。可以参考下
    http://bypassinternetfilters.com/index.php?hl=f5&q=uggc%3A%2F%2Frxnfuvqn.jbeqcerff.pbz%2F2006%2F11%2F06%2Ffperra-zhygvhfre%2F

    问题是整个网上都这样说,开始我愣是没有试验通过。真是奇怪。后来无意发现,screen是个连接,指向了另一个文件,必须使用二进制程序去执行才能具备suid,连接是不具备的,
    同时也因为操作有点麻烦那,不方便使用。
    可以使用的就是两个人用同一个帐号登陆,这样就不好了。改进方法研究中。
    总体的命令就是
    sudo chmod +s /usr/bin/screen
    multiuser on
    acladd huangysh
    貌似也不多,但是想让别人去用,不过推广起来还是挺周折的。很多同事是懒得去研究。

    看到很多人把screen的用法写的很随便,转帖下官方的说明吧。不过好像没有远程连接的功能,我是没有找到。

    screen [ -options ] [ cmd [ args ] ]
    screen -r [[pid.]tty[.host]]
    screen -r sessionowner/[[pid.]tty[.host]]


    2、使用kibitz

    kibitz是expect工具包的一部分,没有的话,就需要从网上下载并编译了。
    用法比较简单,在本机通过用户就可以简单呼叫别人。
    比如kibitz huangysh
    那么huangysh帐号登陆的话,就会在console上收到一个广播消息。告诉你如何去连接,一般是执行一个命令,比如
    Can we talk? Run: kibitz -31317

    你只需要执行kibitz -31317  就可以连接上。
    蛮方便的。



    我想肯定也有其他的方法的。不过目前对终端,tty,pts等概念不是太熟悉。还不知道如何去充分的利用他们。



  • 终于成为教授了

    2009-06-07 00:38:55

    准备了很久,终于决定要加入公司的“教授”队伍了。
    其实自己很菜,但是我想毕竟自己也有自己的所学。
    已经通过了。下一步就要开始行动了。
    行动了还不够,还要有表现,需要别人的认可才可以。

    下步的计划

    1、买权威的shell书,对自己的知识查缺补漏。看看shell高级编程。
    2、学linux,增强全面性和深度。(看已买的基本linux图书,深入进去)
    3、准备课件
    bash基础
    编码与解码浅析
    bash之全新函数式编程与qa函数库


    最新修改为
    bash基础与qa函数库

    专注在这一个方面上。


  • curl作用详谈

    2009-05-20 11:27:09

    这是curl的官方地址。里面描述是最详细的。如果你知道的内容不够多的话,可以继续在里面探索。
    非常棒的一个工具。
    http://curl.haxx.se/docs/manpage.html  众多的命令参数
    http://curl.haxx.se/docs/httpscripting.html  众多的浏览器模拟方法



    同时,转一份前人编写的使用心得吧,写的还是挺全的。

    这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑

    1)
    二话不说,先从这里开始吧!

    curl http://www.yahoo.com

    回车之后,www.yahoo.com 的html就稀里哗啦地显示在屏幕上了~~~~~

    2)
    嗯,要想把读过来页面存下来,是不是要这样呢?
    curl http://www.yahoo.com > page.html

    当然可以,但不用这么麻烦的!
    用curl的内置option就好,存下http的结果,用这个option: -o
    curl -o page.html http://www.yahoo.com

    这样,你就可以看到屏幕上出现一个下载页面进度指示。等进展到100%,自然就OK咯

    3)
    什么什么?!访问不到?肯定是你的proxy没有设定了。
    使用curl的时候,用这个option可以指定http访问所使用的proxy服务器及其端口: -x
    curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com

    4)
    访问有些网站的时候比较讨厌,他使用cookie来记录session信息。
    像IE/NN这样的浏览器,当然可以轻易处理cookie信息,但我们的curl呢?.....
    我们来学习这个option: -D <-- 这个是把http的response里面的cookie信息存到一个特别的文件中去
    curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com

    这样,当页面被存到page.html的同时,cookie信息也被存到了cookie0001.txt里面了

    5)
    那么,下一次访问的时候,如何继续使用上次留下的cookie信息呢?要知道,很多网站都是靠监视你的cookie信息,
    来判断你是不是不按规矩访问他们的网站的。
    这次我们使用这个option来把上次的cookie信息追加到http request里面去: -b
    curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.yahoo.com

    这样,我们就可以几乎模拟所有的IE操作,去访问网页了!

    6)
    稍微等等~~~~~我好像忘记什么了~~~~~
    对了!是浏览器信息~~~~

    有些讨厌的网站总要我们使用某些特定的浏览器去访问他们,有时候更过分的是,还要使用某些特定的版本~~~~
    NND,哪里有时间为了它去找这些怪异的浏览器呢!?

    好在curl给我们提供了一个有用的option,可以让我们随意指定自己这次访问所宣称的自己的浏览器信息: -A
    curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com

    这样,服务器端接到访问的要求,会认为你是一个运行在Windows 2000上的IE6.0,嘿嘿嘿,其实也许你用的是苹果机呢!

    而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"则可以告诉对方你是一台PC上跑着的Linux,用的是Netscape 4.73,呵呵呵

    7)
    另外一个服务器端常用的限制方法,就是检查http访问的referer。比如你先访问首页,再访问里面所指定的下载页,这第二次访问 的referer地址就是第一次访问成功后的页面地址。这样,服务器端只要发现对下载页面某次访问的referer地址不是首页的地址,就可以断定那是个 盗连了~~~~~

    讨厌讨厌~~~我就是要盗连~~~~~!!
    幸好curl给我们提供了设定referer的option: -e
    curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -e "mail.yahoo.com" -o page.html -D cookie0001.txt http://www.yahoo.com

    这样,就可以骗对方的服务器,你是从mail.yahoo.com点击某个链接过来的了,呵呵呵

    8)
    写着写着发现漏掉什么重要的东西了!----- 利用curl 下载文件

    刚才讲过了,下载页面到一个文件里,可以使用 -o ,下载文件也是一样。
    比如, curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
    这里教大家一个新的option: -O
    大写的O,这么用: curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
    这样,就可以按照服务器上的文件名,自动存在本地了!

    再来一个更好用的。
    如果screen1.JPG以外还有screen2.JPG、screen3.JPG、....、screen10.JPG需要下载,难不成还要让我们写一个script来完成这些操作?
    不干!
    在curl里面,这么写就可以了:
    curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG

    呵呵呵,厉害吧?!~~~

    9)
    再来,我们继续讲解下载!
    curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG

    这样产生的下载,就是
    ~zzh/001.JPG
    ~zzh/002.JPG
    ...
    ~zzh/201.JPG
    ~nick/001.JPG
    ~nick/002.JPG
    ...
    ~nick/201.JPG

    够方便的了吧?哈哈哈

    咦?高兴得太早了。
    由于zzh/nick下的文件名都是001,002...,201,下载下来的文件重名,后面的把前面的文件都给覆盖掉了~~~

    没关系,我们还有更狠的!
    curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG

    --这是.....自定义文件名的下载?
    --对头,呵呵!

    #1是变量,指的是{zzh,nick}这部分,第一次取值zzh,第二次取值nick
    #2代表的变量,则是第二段可变部分---[001-201],取值从001逐一加到201
    这样,自定义出来下载下来的文件名,就变成了这样:
    原来: ~zzh/001.JPG ---> 下载后: 001-zzh.JPG
    原来: ~nick/001.JPG ---> 下载后: 001-nick.JPG

    这样一来,就不怕文件重名啦,呵呵

    9)
    继续讲下载
    我们平时在windows平台上,flashget这样的工具可以帮我们分块并行下载,还可以断线续传。
    curl在这些方面也不输给谁,嘿嘿

    比如我们下载screen1.JPG中,突然掉线了,我们就可以这样开始续传
    curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG

    当然,你不要拿个flashget下载了一半的文件来糊弄我~~~~别的下载软件的半截文件可不一定能用哦~~~

    分块下载,我们使用这个option就可以了: -r
    举例说明
    比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 要下载(赵老师的电话朗诵 :D
    我们就可以用这样的命令:
    curl -r 0-10240 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
    curl -r 10241-20480 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
    curl -r 20481-40960 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
    curl -r 40961- -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3

    这样就可以分块下载啦。
    不过你需要自己把这些破碎的文件合并起来
    如果你用UNIX或苹果,用 cat zhao.part* > zhao.mp3就可以
    如果用的是Windows,用copy /b 来解决吧,呵呵

    上面讲的都是http协议的下载,其实ftp也一样可以用。
    用法嘛,
    curl -u name:passwd ftp://ip:port/path/file
    或者大家熟悉的
    curl ftp://name:passwd@ip:port/path/file

    10)
    说完了下载,接下来自然该讲上传咯
    上传的option是 -T

    比如我们向ftp传一个文件: curl -T localfile -u name:passwd ftp://upload_site:port/path/

    当然,向http服务器上传文件也可以
    比如 curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi
    注意,这时候,使用的协议是HTTP的PUT method

    刚才说到PUT,嘿嘿,自然让老服想起来了其他几种methos还没讲呢!
    GET和POST都不能忘哦。

    http提交一个表单,比较常用的是POST模式和GET模式

    GET模式什么option都不用,只需要把变量写在url里面就可以了
    比如:
    curl http://www.yahoo.com/login.cgi?user=nickwolfe&password=12345

    而POST模式的option则是 -d

    比如,curl -d "user=nickwolfe&password=12345" http://www.yahoo.com/login.cgi
    就相当于向这个站点发出一次登陆申请~~~~~

    到底该用GET模式还是POST模式,要看对面服务器的程序设定。

    一点需要注意的是,POST模式下的文件上的文件上传,比如
    <form. method="POST" enctype="multipar/form-data" action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi">
    <input type=file name=upload>
    <input type=submit name=nick value="go">
    </form>
    这样一个HTTP表单,我们要用curl进行模拟,就该是这样的语法:
    curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi

    罗罗嗦嗦讲了这么多,其实curl还有很多很多技巧和用法
    比如 https的时候使用本地证书,就可以这样
    curl -E localcert.pem https://remote_server

    再比如,你还可以用curl通过dict协议去查字典~~~~~
    curl dict://dict.org/d:computer

    今天就先讲到这里吧,呵呵。疯狂的curl功能,需要你---一起来发掘。

    copyright by nickwolfe@CCF
    2004.08.24 21:24应朋友之邀所作--初稿




  • Linux下实现bash并发

    2009-04-01 10:08:22

    自己写的命令,还无法进行并发执行。shell的一个缺点。没有并发的概念。只能通过后台进程去实现了。最后终于解决。

    粗糙简单的代码

    gexecbg()
    {
        jid_old=`jobs -p|tail -n 1`
        for i in ${*:1:$#-1};
        do
            [[ $i > = ]]&&host=$i.asc.cnz.alimama.com||host=119.42.239.$i
            ssh $host ${*:$#} &
        done
        jid_new=`jobs -p`
        wait ${jid_new#*`echo $jid_old`} 2>/dev/null||:
    }

    用法:  gexecbg 31 32 33 'hostname' 
    就会在指定的ip上,运行上述命令。而且是并发的。一些分析大量日志的操作,可以使用此函数。

    另一篇比较好的参考文章:http://www.cnitblog.com/sysop/archive/2008/11/03/50974.aspx

    附上关于linux的jobs的细节。(转)


    下列命令可以用来操纵进程任务:
    T"^9tMQ?7b#mE   ps 列出系统中正在运行的进程;
    %gNPr `   kill 发送信号给一个或多个进程(经常用来杀死一个进程);
    d| O/E9h.} [}   jobs 列出当前shell环境中已启动的任务状态,若未指定jobsid,则显示所有活动的任务状态信息;如果报告了一个任务的终止(即任务的状态被标记为Terminated),shell 从当前的shell环境已知的列表中删除任务的进程标识;3V$Ml E$m
      bg 将进程搬到后台运行(Background);
    D DB OAk6o   fg 将进程搬到前台运行(Foreground);
    (Z8Y(_9m-FV8cwzFL.f
    *Io:SB(d   将job转移到后台运行 q0uc9rq)Q9`?"O
      如果你经常在X图形下工作,你可能有这样的经历:通过终端命令运行一个GUI程序,GUI界面出来了,但是你的终端还停留在原地,你不能在shell中继续执行其他命令了,除非将GUI程序关掉。
    hN#~+wa${W
    &`};b9@-b9W   为了使程序执行后终端还能继续接受命令,你可以将进程移到后台运行,使用如下命令运行程序: #假设要运行xmmsK-^\qXXDK

    K K7^ Od;aY_v6}   $xmms &
    b"f"@.}5X5|Is y }-A0U*u7S?L
      这样打开xmms后,终端的提示又回来了。现在xmms在后台运行着呢;但万一你运行程序时忘记使用“&”了,又不想重新执行;你可以先使用ctrl+z挂起程序,然后敲入bg命令,这样程序就在后台继续运行了。
    X%x!@ R7^v@ x
    ;P}BHn/xS/{5d)Kc   概念:当前任务
    4@#zJ/d(~eGn2T
    s iN4]y   如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码 “[2]”的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均 是当前任务。
    8K3Q2Z~vO e`"t
    s1q,@ vS7P9`+eHC"|   察看jobs zur2GSr
      使用jobs或ps命令可以察看正在执行的jobs。
    "rCQ5G)rr ?,S sq1gfkW]
      jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;
    i$q~rb4h K5D s.[k m;TQX2v
      进程的挂起 "u"G2A-W3qRZ7l/VJ'X

    { {\G:E$h1V~n,J   后台进程的挂起:
    ^(MXS|u-}YJz 9P DlE3pR
      在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;LQS{E1}
    |!`+H.}%W9y
      在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;;cIfB7l$K0GY"P

    )k i(_cM   当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;
    7Ka@'ri$d E
    $ti!\#u9i6j/k"j   前台进程的挂起:y6b `4BrABs

    D4g%u1~$_0d&sJY   ctrl+Z;
    sE+K'Ah1{/Q+H/Z`8y}
    F J,E.~U/N i   进程的终止 l|?m\}
    ;o6xr i_+Ue F
      后台进程的终止:
    'Y:T5M9ZP|1e   方法一:
    (V(yiO5`T@6_   通过jobs命令查看job号(假设为num),然后执行kill %numZ8`l~B

    yf(N%g{,lgn u   方法二:SwQ,D6}h1nr8G
      通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid :d]Bt7vO
    r t9a.mPW"FA
      前台进程的终止:!MX `w}

    #b'p$JBv9I$J{w   ctrl+c
    r7\yXf W s)c6K}/T
    q@{5["M"g#f(O |,G   kill的其他作用
    9CFa"rC3_Z   kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。 7Iv"z&KA:f'K

    EWC:Vsm;rvi:y.XV+q   SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。
  • csv导入mysql

    2009-03-27 23:01:17

    同事让我把两份csv文件中的数据连接起来,就是把一个csv文件中的id换成另一个csv文件中的对应的字符串。
    excel不熟,数量也不小。放弃手工的可能性了。
    可惜我不会excel,不知道是否有这种功能。

    初步设想是使用shell编程实现,但是里面含有大量的汉字,转换的时候,容易出现乱码的情况。
    后来想一下,发现这种要求很像sql的连接查询。

    如果能够转换成数据库,然后再连接查询出来,岂不更好。就不用谢一堆代码了。
    研究了一阵子,发现了 MySQL-Front 可以很方便的输入输出数据表为xls等其他文件格式。非常的方便。
    导入进去了。然后使用连接查询得出结果。然后把结果再导出问excel文件即可。

    或者使用access,利用access的导入功能,把xls导入为表,然后连接查询,把结果粘贴进excel即可。

    任务顺利完成,庆幸自己幸好没有使用shell完成,会点sql还是挺有帮助的。
    有的时候需要转换下思路,这样更好。
    附上sql的语句。

    SELECT *
    FROM data
    left  JOIN ff
    ON  ff.id=data.fid

  • Linux性能监控命令

    2009-03-23 15:22:00

    vmstat
    iostat
    top
    ps
    sar
    nmon

    sysstat工具包
    http://pagesperso-orange.fr/sebastien.godard/download.html

    最近想利用系统中的一些基本命令,以脚本的形式,自动分析系统的状况。
    可以监控到全系统。也可以监控到进程级别。

    一些基本的指标
    cpu_busy,cpu_idle,cpu_iowait,mem_user,memcache,load_one



  • Sar用法(转)

    2009-03-23 15:17:42

    最近在找进程级别的监控工具。发现了这篇文章,还是不错的。收录下。sar的功能其实已经涵盖了vmstat,iostat。

    linux 和unix下SAR命令的用法,对机器性能检测很有帮助

    dmesg可以直接查看cpu的主频,要查看CPU、内存的使用情况可以使用sar!

    sar 命令行的常用格式: sar [options] [-A] [-o file] t [n]

    在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有 的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式 存放在文件中,file 在此处不是关键字,是文件名。options 为命令行选项,sar命令 的选项很多,下面只列出常用选项:

          -A:所有报告的总和。         -u:CPU利用率         -v:进程、I节点、文件和锁表状态。         -d:硬盘使用报告。         -r:没有使用的内存页面和硬盘块。         -g:串口I/O的情况。 -b:缓冲区使用情况。 -a:文件读写情况。 -c:系统调用情况。 -R:进程的活动情况。 -y:终端设备活动情况。 -w:系统交换活动。

    下面将举例说明。

    例一:使用命令行 sar -u t n

    例如,每60秒采样一次,连续采样5次,观察CPU 的使用情况,并将采样结果以二进制 形式存入当前目录下的文件zhou中,需键入如下命令:

    # sar -u -o zhou 60 5

    屏幕显示:

      SCO_SV   scosysv 3.2v5.0.5 i80386   10/01/2001     14:43:50   %usr   %sys  %wio    %idle(-u)     14:44:50   0     1    4      94     14:45:50   0     2    4      93     14:46:50   0     2    2      96     14:47:50   0     2    5      93     14:48:50   0     2    2      96     Average    0     2    4      94

    在显示内容包括:

      %usr:CPU处在用户模式下的时间百分比。   %sys:CPU处在系统模式下的时间百分比。   %wio:CPU等待输入输出完成时间的百分比。   %idle:CPU空闲时间百分比。

    在所有的显示中,我们应主要注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈, %idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存, 此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表 明系统中最需要解决的资源是CPU。

    如果要查看二进制文件zhou中的内容,则需键入如下sar命令:

        # sar -u -f zhou

    可见,sar命令即可以实时采样,又可以对以往的采样结果进行查询。

    例二:使用命行sar -v t n

    例如,每30秒采样一次,连续采样5次,观察核心表的状态,需键入如下命令:

    # sar -v 30 5

    屏幕显示:       SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001       10:33:23 proc-sz ov inod-sz ov file-sz ov lock-sz   (-v) 10:33:53 305/ 321  0 1337/2764  0 1561/1706 0 40/ 128 10:34:23 308/ 321  0 1340/2764  0 1587/1706 0 37/ 128 10:34:53 305/ 321  0 1332/2764  0 1565/1706 0 36/ 128 10:35:23 308/ 321  0 1338/2764  0 1592/1706 0 37/ 128 10:35:53 308/ 321  0 1335/2764  0 1591/1706 0 37/ 128

    显示内容包括:

    proc-sz:目前核心中正在使用或分配的进程表的表项数,由核心参数MAX-PROC控制。

      inod-sz:目前核心中正在使用或分配的i节点表的表项数,由核心参数 MAX-INODE控制。

      file-sz: 目前核心中正在使用或分配的文件表的表项数,由核心参数MAX-FILE控 制。

      ov:溢出出现的次数。

      Lock-sz:目前核心中正在使用或分配的记录加锁的表项数,由核心参数MAX-FLCKRE 控制。

    显示格式为

    实际使用表项/可以使用的表项数

    显示内容表示,核心使用完全正常,三个表没有出现溢出现象,核心参数不需调整,如 果出现溢出时,要调整相应的核心参数,将对应的表项数加大。

    例三:使用命行sar -d t n

    例如,每30秒采样一次,连续采样5次,报告设备使用情况,需键入如下命令:

    # sar -d 30 5

    屏幕显示:

          SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001 11:06:43 device %busy   avque   r+w/s  blks/s  avwait avserv (-d) 11:07:13 wd-0   1.47   2.75   4.67   14.73   5.50 3.14 11:07:43 wd-0   0.43   18.77   3.07   8.66   25.11 1.41 11:08:13 wd-0   0.77   2.78   2.77   7.26   4.94 2.77 11:08:43 wd-0   1.10   11.18   4.10   11.26   27.32 2.68 11:09:13 wd-0   1.97   21.78   5.86   34.06   69.66 3.35 Average wd-0   1.15   12.11   4.09   15.19   31.12 2.80

    显示内容包括:

    device: sar命令正在监视的块设备的名字。   %busy: 设备忙时,传送请求所占时间的百分比。   avque: 队列站满时,未完成请求数量的平均值。   r+w/s: 每秒传送到设备或从设备传出的数据量。   blks/s: 每秒传送的块数,每块512字节。   avwait: 队列占满时传送请求等待队列空闲的平均时间。   avserv: 完成传送请求所需平均时间(毫秒)。

    在显示的内容中,wd-0是硬盘的名字,%busy的值比较小,说明用于处理传送请求的有 效时间太少,文件系统效率不高,一般来讲,%busy值高些,avque值低些,文件系统 的效率比较高,如果%busy和avque值相对比较高,说明硬盘传输速度太慢,需调整。

    例四:使用命行sar -b t n

    例如,每30秒采样一次,连续采样5次,报告缓冲区的使用情况,需键入如下命令:

    # sar -b 30 5

    屏幕显示:

      SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001 14:54:59 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s (-b) 14:55:29 0  147  100  5  21  78   0   0 14:55:59 0  186  100  5  25  79   0   0 14:56:29 4  232   98  8  58  86   0   0 14:56:59 0  125  100  5  23  76   0   0 14:57:29 0   89  100  4  12  66   0   0 Average  1  156   99  5  28  80   0   0

    显示内容包括:

    bread/s: 每秒从硬盘读入系统缓冲区buffer的物理块数。 lread/s: 平均每秒从系统buffer读出的逻辑块数。 %rcache: 在buffer cache中进行逻辑读的百分比。 bwrit/s: 平均每秒从系统buffer向磁盘所写的物理块数。 lwrit/s: 平均每秒写到系统buffer逻辑块数。 %wcache: 在buffer cache中进行逻辑读的百分比。 pread/s: 平均每秒请求物理读的次数。 pwrit/s: 平均每秒请求物理写的次数。

    在显示的内容中,最重要的是%cache和%wcache两列,它们的值体现着buffer的使用效 率,%rcache的值小于90或者%wcache的值低于65,应适当增加系统buffer的数量,buffer 数量由核心参数NBUF控制,使%rcache达到90左右,%wcache达到80左右。但buffer参数 值的多少影响I/O效率,增加buffer,应在较大内存的情况下,否则系统效率反而得不到 提高。

    例五:使用命行sar -g t n

    例如,每30秒采样一次,连续采样5次,报告串口I/O的操作情况,需键入如下命令:

    # sar -g 30 5

    屏幕显示:

    SCO_SV scosysv 3.2v5.0.5 i80386  11/22/2001 17:07:03  ovsiohw/s  ovsiodma/s  ovclist/s (-g) 17:07:33   0.00   0.00   0.00 17:08:03   0.00   0.00   0.00 17:08:33   0.00   0.00   0.00 17:09:03   0.00   0.00   0.00 17:09:33   0.00   0.00   0.00 Average    0.00   0.00   0.00

    显示内容包括:

    ovsiohw/s:每秒在串口I/O硬件出现的溢出。

    ovsiodma/s:每秒在串口I/O的直接输入输出通道高速缓存出现的溢出。

    ovclist/s :每秒字符队列出现的溢出。

    在显示的内容中,每一列的值都是零,表明在采样时间内,系统中没有发生串口I/O溢 出现象。

    sar命令的用法很多,有时判断一个问题,需要几个sar命令结合起来使用,比如,怀疑 CPU存在瓶颈,可用sar -u 和sar -q来看,怀疑I/O存在瓶颈,可用sar -b、sar -u和sar-d来看。 -------------------------------------------------------------------------------- Sar -A 所有的报告总和 -a 文件读,写报告 -B 报告附加的buffer cache使用情况 -b buffer cache使用情况 -c 系统调用使用报告 -d 硬盘使用报告 -g 有关串口I/O情况 -h 关于buffer使用统计数字 -m IPC消息和信号灯活动 -n 命名cache -p 调页活动 -q 运行队列和交换队列的平均长度 -R 报告进程的活动 -r 没有使用的内存页面和硬盘块 -u CPU利用率 -v 进程,i节点,文件和锁表状态 -w 系统交换活动 -y TTY设备活动

    -a 报告文件读,写报告 sar –a 5 5 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002 11:45:40 iget/s namei/s dirbk/s (-a) 11:45:45 6 2 2 11:45:50 91 20 28 11:45:55 159 20 18 11:46:00 157 21 19 11:46:05 177 30 35 Average 118 18 20

    iget/s 每秒由i节点项定位的文件数量 namei/s 每秒文件系统路径查询的数量 dirbk/s 每秒所读目录块的数量

    *这些值越大,表明核心花在存取用户文件上的时间越多,它反映着一些程序和应用文件系统产生的负荷。一般地,如果iget/s与namei /s的比值大于5,并且namei/s的值大于30,则说明文件系统是低效的。这时需要检查文件系统的自由空间,看看是否自由空间过少。

    -b 报告缓冲区(buffer cache)的使用情况 sar -b 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002 13:51:28 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s (-b) 13:51:30 382 1380 72 131 273 52 0 0 13:51:32 378 516 27 6 22 72 0 0 13:51:34 172 323 47 39 57 32 0 0 Average 310 739 58 58 117 50 0 0

    bread/s 平均每秒从硬盘(或其它块设备)读入系统buffer的物理块数 lread/s 平均每秒从系统buffer读出的逻辑块数 %rcache 在buffer cache中进行逻辑读的百分比(即100% - bread/lreads) bwrit/s 平均每秒从系统buffer向磁盘(或其它块设备)所写的物理块数 lwrit/s 平均每秒写到系统buffer的逻辑块数 %wcache 在buffer cache中进行逻辑写的百分比(即100% - bwrit/lwrit). pread/sgu 平均每秒请求进行物理读的次数 pwrit/s 平均每秒请求进行物理写的次数

    *所显示的内容反映了目前与系统buffer有关的读,写活。在所报告的数字中,最重要的是%rcache和%wcache(统称为 cache命中率)两列,它们具体体现着系统buffer的效率。衡量cache效率的标准是它的命中率值的大小。 *如果%rcache的值小于90或者%wcache的值低于65,可能就需要增加系统buffer的数量。如果在系统的应用中,系统的I/O活动十分频 繁,并且在内存容量配置比较大时,可以增加buffer cache,使%rcache达到95左右,%wcache达到80左右。 *系统buffer cache中,buffer的数量由核心参数NBUF控制。它是一个要调的参数。系统中buffer数量的多少是影响系统I/O效率的瓶颈。要增加系统 buffer数量,则要求应该有较大的内存配置。否则一味增加buffer数量,势必减少用户进程在内存中的运行空间,这同样会导致系统效率下降。

    -c 报告系统调用使用情况 sar -c 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002 17:02:42 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s (-c) 17:02:44 2262 169 141 0.00 0.00 131250 22159 17:02:46 1416 61 38 0.00 0.00 437279 6464 17:02:48 1825 43 25 0.00 0.00 109397 42331 Average 1834 91 68 0.00 0.00 225975 23651

    scall/s 每秒使用系统调用的总数。一般地,当4~6个用户在系统上工作时,每秒大约30个左右。 sread/s 每秒进行读操作的系统调用数量。 swrit/s 每秒进行写操作的系统调用数量。 fork/s 每秒fork系统调用次数。当4~6个用户在系统上工作时,每秒大约0.5秒左右。 exec/s 每秒exec系统调用次数。 rchar/s 每秒由读操作的系统调用传送的字符(以字节为单位)。 wchar/s 每秒由写操作的系统调用传送的字符(以字节为单位)。 *如果scall/s持续地大于300,则表明正在系统中运行的可能是效率很低的应用程序。在比较 典型的情况下,进行读操作的系统调用加上进行写操作的系统调用之和,约是scall的一半左右。

    -d 报告硬盘使用情况 sar -d 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002 17:27:49 device %busy avque r+w/s blks/s avwait avserv (-d) 17:27:51 ida-0 6.93 1.00 13.86 259.41 0.00 5.00 ida-1 0.99 1.00 17.33 290.10 0.00 0.57 17:27:53 ida-0 75.50 1.00 54.00 157.00 0.00 13.98 ida-1 9.50 1.00 12.00 75.00 0.00 7.92 17:27:55 ida-0 7.46 1.00 46.77 213.93 0.00 1.60 ida-1 17.41 1.00 57.71 494.53 0.00 3.02 Average ida-0 29.85 1.00 38.14 210.28 0.00 7.83 ida-1 9.29 1.00 29.02 286.90 0.00 3.20

    device 这是sar命令正在监视的块设备的名字。 %busy 设备忙时,运行传送请求所占用的时间。这个值以百分比表示。 avque 在指定的时间周期内,没有完成的请求数量的平均值。仅在队列被占满时取这个值。 r+w/s 每秒传送到设备或者从设备传送出的数据量。 blks/s 每秒传送的块数。每块512个字节。 avwait 传送请求等待队列空闲的平均时间(以毫秒为单位)。仅在队列被占满时取这个值。 avserv 完成传送请求所需平均时间(以毫秒为单位) *ida-0和ida-1是硬盘的设备名字。在显示的内容中,如果%busy的值比较小,说明用于处理 传送请求的有效时间太少,文件系统的效率不高。要使文件系统的效率得到优化,应使%busy的数值相对高一些,而avque的值应该低一些。

    -g 报告有关串口I/O情况 sar -g 3 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 11:10:09 ovsiohw/s ovsiodma/s ovclist/s (-g) 11:10:12 0.00 0.00 0.00 11:10:15 0.00 0.00 0.00 11:10:18 0.00 0.00 0.00 Average 0.00 0.00 0.00

    ovsiohw/s 每秒在串囗I/O硬件出现的溢出。 ovsiodma/s 每秒在串囗I/O的直接输入,输出信道高速缓存出现的溢出。 ovclist/s 每秒字符队列出现的溢出。

    -m 报告进程间的通信活动(IPC消息和信号灯活动)情况 sar -m 4 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 13:24:28 msg/s sema/s (-m) 13:24:32 2.24 9.95 13:24:36 2.24 21.70 13:24:40 2.00 36.66 Average 2.16 22.76

    msg/s 每秒消息操作的次数(包括发送消息的接收信息)。 sema/s 每秒信号灯操作次数。 *信号灯和消息作为进程间通信的工具,如果在系统中运行的应用过程中没有使用它们,那么由sar命令报告的msg 和sema的值都将等于0.00。如果使用了这些工具,并且其中或者msg/s大于100,或者sema/s大于100,则表明这样的应用程序效率比较 低。原因是在这样的应用程序中,大量的时间花费在进程之间的沟通上,而对保证进程本身有效的运行时间必然产生不良的影响。

    -n 报告命名缓冲区活动情况 sar -n 4 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 13:37:31 c_hits cmisses (hit %) (-n) 13:37:35 1246 71 (94%) 13:37:39 1853 81 (95%) 13:37:43 969 56 (94%) Average 1356 69 (95%)

    c_hits cache命中的数量。 cmisses cache未命中的数量。 (hit %) 命中数量/(命中数理+未命中数量)。 *不难理解,(hit %)值越大越好,如果它低于90%,则应该调整相应的核心参数。

    -p 报告分页活动 sar -p 5 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 13:45:26 vflt/s pflt/s pgfil/s rclm/s (-p) 13:45:31 36.25 50.20 0.00 0.00 13:45:36 32.14 58.48 0.00 0.00 13:45:41 79.80 58.40 0.00 0.00 Average 49.37 55.69 0.00 0.00

    vflt/s 每秒进行页面故障地址转换的数量(由于有效的页面当前不在内存中)。 pflt/s 每秒来自由于保护错误出现的页面故障数量(由于对页面的非法存,取引起的页面故障)。 pgfil/s 每秒通过”页—入”满足vflt/s的数量。 rclm/s 每秒由系统恢复的有效页面的数量。有效页面被增加到自由页面队列上。 *如果vflt/s的值高于100,可能预示着对于页面系统来说,应用程序的效率不高,也可能分页参数需要调整,或者内存配置不太合适。

    -q 报告进程队列(运行队列和交换队列的平均长度)情况 sar -q 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 14:25:50 runq-sz %runocc swpq-sz %swpocc (-q) 14:25:52 4.0 50 14:25:54 9.0 100 14:25:56 9.0 100 Average 7.3 100

    runq-sz 准备运行的进程运行队列。 %runocc 运行队列被占用的时间(百分比) swpq-sz 要被换出的进程交换队列。 %swpocc 交换队列被占用的时间(百分比)。 *如果%runocc大于90,并且runq-sz的值大于2,则表明CPU的负载较重。其直接后果,可能使系统的响应速度降低。如果%swpocc大于 20,表明交换活动频繁,将严重导致系统效率下降。解决的办法是加大内存或减少缓存区数量,从而减少交换及页—入,页—出活动。

    -r 报告内存及交换区使用情况(没有使用的内存页面和硬盘块) sar -r 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 10:14:19 freemem freeswp availrmem availsmem (-r) 10:14:22 279729 6673824 93160 1106876 10:14:24 279663 6673824 93160 1106876 10:14:26 279661 6673824 93160 1106873 Average 279684 6673824 93160 1106875

    freemem 用户进程可以使用的内存页面数,4KB为一个页面。 freeswp 用于进程交换可以使用的硬盘盘块,512B为一个盘块。

    -u CPU利用率 sar -u 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 10:27:23 %usr %sys %wio %idle (-u) 10:27:25 2 3 8 88 10:27:27 3 3 5 89 10:27:29 0 0 0 100 Average 2 2 4 92 . %usr cpu处在用户模式下时间(百分比) %sys cpu处在系统模式下时间(百分比) %wio cpu等待输入,输出完成(时间百分比) %idle cpu空闲时间(百分比) *在显示的内容中,%usr和 %sys这两个值一般情况下对系统无特别影响,%wio的值不能太高,如果%wio的值过高,则CPU花在等待输入,输出上的时间太多,这意味着硬盘存在 I/O瓶颈。如果%idle的值比较高,但系统响应并不快,那么这有可能是CPU花时间等待分配内存引起的。%idle的值可以较深入帮助人们了解系统的 性能,在这种情况上,%idle的值处于40~100之间,一旦它持续低于30,则表明进程竟争的主要资源不是内存而是CPU。 *在有大量用户运行的系统中,为了减少CPU的压力,应该使用智能多串卡,而不是非智能多串卡。智能多串卡可以承担CPU的某些负担。 *此外,如果系统中有大型的作业运行,应该把它们合理调度,错开高峰,当系统相对空闲时再运行。

    -v 报告系统表的内容(进程,i节点,文件和锁表状态) sar -v 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 10:56:46 proc-sz ov inod-sz ov file-sz ov lock-sz (-v) 10:56:48 449/ 500 0 994/4147 0 1313/2048 0 5/ 128 10:56:50 450/ 500 0 994/4147 0 1314/2048 0 5/ 128 10:56:52 450/ 500 0 994/4147 0 1314/2048 0 5/ 128

    proc-sz 目前在核心中正在使用或分配的进程表的表项数 inod-sz 目前在核心中正在使用或分配的i节点表的表项数 file-sz 目前在核心中正在使用或分配的文件表的表项数 ov 溢出出现的次数 lock-sz 目前在核心中正在使用或分配的记录加锁的表项数 *除ov外,均涉及到unix的核心参数,它们分别受核心参数NPROC,NIMODE,NFILE和FLOCKREC的控制。 *显示格式为: 实际使用表项/整个表可以使用的表项数 比如,proc-sz一列所显示的四个数字中,分母的100是系统中整个进程表的长度(可建立100个表项),分子上的24,26和25分别是采样的那一段时间所使用的进程表项。inod-sz,file-sz和lock-sz三列数字的意义也相同。 三列ov的值分别对应进程表,i节点表和文件表,表明目前这三个表都没有出现溢出现象,当出现溢出时,需要调整相应的核心参数,将对应表加大。

    -w 系统交换活动 sar -w 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 11:22:05 swpin/s bswin/s swpot/s bswots pswch/s (-w) 11:22:07 0.00 0.0 0.00 0.0 330 11:22:09 0.00 0.0 0.00 0.0 892 11:22:11 0.00 0.0 0.00 0.0 1053 Average 0.00 0.0 0.00 0.0 757

    swpin/s 每秒从硬盘交换区传送进入内存的次数。 bswin/s 每秒为换入而传送的块数。 swpot/s 每秒从内存传送到硬盘交换区的次数。 bswots 每秒为换出而传送的块数。 pswch/s 每秒进程交换的数量。 *swpin/s,bswin/s,swpot/s和bswots描述的是与硬盘交换区相关的交换活动。交换关系到系统的效率。交换区在硬盘上对硬盘的 读,写操作比内存读,写慢得多,因此,为了提高系统效率就应该设法减少交换。通常的作法就是加大内存,使交换区中进行的交换活动为零,或接近为零。如果 swpot/s的值大于1,预示可能需要增加内存或减少缓冲区(减少缓冲区能够释放一部分自由内存空间)。

    -y 报告终端的I/O活动(TTY设备活动)情况 sar -y 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 11:38:03 rawch/s canch/s outch/s rcvin/s xmtin/s mdmin/s (-y) 11:38:05 5 0 951 0 1 0 11:38:07 10 0 996 0 0 0 11:38:09 4 0 2264 0 0 0 Average 6 0 1404 0 1 0

    rawch/s 每秒输入的字符数(原始队列) canch/s 每秒由正则队列(canonical queue)处理的输入字符数。进行正则处理过程中,可以识别出一些有特殊意义的字符。比如,(中断字符),(退出符),(退格键)等。因此,canch/s中的计数不包括这些有特殊意义的字符。 outch/s 每秒输出的字符数。 rcvin/s 每秒接收的硬件中断次数。 xmtin/s 每秒发出的硬件中断次数。 mdmin/s 每秒modem中断次数。 *应该特别说明,sar命令可以对任意终端活动进行统计,所谓任意终端,是指任意tty设备。它们可以是串行终端,主控台,伪终端等等。 *在这几个量中,modem中断次数mdmin/s应该接近0。其它没有特殊要求,但如果每发送一个字符,中断的数量就动态地增加,这表明终端线出了差错,可能是接触不好。
  • awk处理一条记录占据多行的情况

    2009-03-23 11:35:51

    假设有记录占据了三行,两个记录。
    以前都是使用sed去读取。不停的变化行数来实现。
    后来想象,awk的功能,我应该还没有挖掘到底。
    需要把更多的逻辑运算通过awk来完成。

    echo '
    111
    222
    333
    4444
    555
    666
    '|awk 'BEGIN{FS="\n";RS="";}{for(i=1;i<NF;i++) {print $i,$(++i),$(++i)}}'
    111 222 333
    4444 555 666
  • 《鸟哥的linux私房菜》与《linux系统管理手册第二版》到手

    2009-03-20 02:37:16

    看了red hat的招聘,感觉挺高端的。
    项目中用到的linux技术很多,很多人都不懂,最近公司在讨论一些分布式的话题,我也是一点都不懂。
    谈的都是架构的问题。发现自己的技术还是欠缺很多。

    突然萌发了一个想法。想学习一下linux,转去red hat这样的大公司作测试。做上一年。学到的技术,应该就可以为国内的这些公司服务了。
    现在在公司,自己什么都不是。也不能老是这样。
    要尽快由菜鸟变成凤凰。

    学习linux。自己的shell在公司已经无敌了。开始转入高端的领域学习吧。
    同时坚持学习英语。等英语过关了,linux也就是小菜一碟了。

  • shell函数之getopts使用

    2009-03-13 19:53:31

    困扰了很久,我使用的是函数式编程,脚本里经常使用的getopts,放在函数中就是不行。今天终于解决了。
    铭记一下。

    showopts () {
        unset OPTIND
        while getopts "pq:" optname
        do
            echo  $optname
            case "$optname" in
                "p")
                echo "Option $optname is specified"
                ;;
                "q")
                echo "Option $optname has value $OPTARG"
                ;;
                "?")
                echo "Unknown option $OPTARG"
                ;;
                ":")
                echo "No argument value for option $OPTARG"
                ;;
                *)
                # Should not occur
                echo "Unknown error while processing options"
                ;;
            esac
        done
    }



  • 写得蛮好的linux学习笔记(转)

    2009-03-12 23:24:28


    linux目录架构
    /   根目录
    /bin    常用的命令 binary file 的目錄
    /boot   存放系统启动时必须读取的档案,包括核心 (kernel) 在内
         /boot/grub/menu.lst   GRUB设置
         /boot/vmlinuz   内核
         /boot/initrd     核心解壓縮所需 RAM Disk
    /dev    系统周边设备    
    /etc    系统相关设定文件
         /etc/DIR_COLORS   设定颜色
         /etc/HOSTNAME   设定用户的节点名
         /etc/NETWORKING   只有YES标明网络存在
         /etc/host.conf 文件说明用户的系统如何查询节点名
         /etc/hosts 设定用户自已的IP与名字的对应表
         /etc/hosts.allow 设置允许使用inetd的机器使用
         /etc/hosts.deny 设置不允许使用inetd的机器使用
         /etc/hosts.equiv 设置远端机不用密码
         /etc/inetd.conf 设定系统网络守护进程inetd的配置
         /etc/gateways 设定路由器
         /etc/protocols 设定系统支持的协议
         /etc/named.boot 设定本机为名字服务器的配置文件
         /etc/sysconfig/network-scripts/ifcfg-eth0   设置IP
         /etc/resolv.conf    设置DNS 
         /etc/X11  X Window的配置文件,xorg.conf XF86Config 這兩個 X Server 的設定檔
         /etc/fstab    记录开机要mount的文件系统
         /etc/inittab 设定系统启动时init进程将把系统设置成什么样的runlevel
         /etc/issue 记录用户登录前显示的信息
         /etc/group 设定用户的组名与相关信息
         /etc/passwd 帐号信息
         /etc/shadow 密码信息
         /etc/sudoers 可以sudo命令的配置文件
         /etc/securetty 设定哪些终端可以让root登录
         /etc/login.defs 所有用户登录时的缺省配置
         /etc/exports 设定NFS系统用的
         /etc/init.d/   所有服務的預設啟動 script. 都是放在這裡的,例如要啟動或者關閉
         /etc/xinetd.d/  這就是所謂的 super daemon 管理的各項服務的設定檔目錄
         /etc/modprobe.conf   内核模块额外参数设定
         /etc/syslog.conf   日志设置文件
    /home   使用者家目录
    /lib    系统会使用到的函数库
         /lib/modules   kernel 的相关模块
         /var/lib/rpm   rpm套件安装处
    /lost+found    系統不正常產生錯誤時,會將一些遺失的片段放置於此目錄下
    /mnt     外设的挂载点
    /media   /mnt类似
    /opt     主机额外安装的软件
    /proc    虚拟目录,是内存的映射
          /proc/version   内核版本
           /proc/sys/kernel   系统内核功能
    /root    系统管理员的家目录
    /sbin    系统管理员才能执行的指令
    /srv     一些服務啟動之後,這些服務所需要取用的資料目錄
    /tmp     一般使用者或者是正在執行的程序暫時放置檔案的地方
    /usr     最大的目录,存许应用程序和文件
        /usr/X11R6   X-Window目录
        /usr/src    Linux源代码
        /usr/include:系统头文件
        /usr/openwin 存放SUNOpenWin
        /usr/man 在线使用手册
        /usr/bin           使用者可執行的 binary file 的目錄
        /usr/local/bin     使用者可執行的 binary file 的目錄
        /usr/lib           系统会使用到的函数库
        /usr/local/lib     系统会使用到的函数库
        /usr/sbin          系统管理员才能执行的指令
        /usr/local/sbin    系统管理员才能执行的指令
    /var   日志文件
        /var/log/secure    記錄登入系統存取資料的檔案,例如 pop3, ssh, telnet, ftp 等都會記錄在此檔案中
        /var/log/wtmp      記錄登入者的訊息資料, last
        /var/log/messages  幾乎系統發生的錯誤訊息
        /var/log/boot.log  記錄開機或者是一些服務啟動的時候,所顯示的啟動或關閉訊息
        /var/log/maillog   紀錄郵件存取或往來( sendmail pop3 )的使用者記錄
        /var/log/cron      記錄 crontab 這個例行性服務的內容
        /var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log
        分別是幾個不同的網路服務的記錄檔
     
    一些常用的基本命令:
    uname -a    查看内核版本      
    ls -al    显示所有文件的属性
    pwd         显示当前路径       
    cd -    返回上一次目录     cd ~    返回主目录
    date s      设置时间、日期         
    cal      显示日历     cal 2006
    bc          计算器具              
    man  & info     帮助手册
    locale     显示当前字体     locale -a    所有可用字体     /etc/sysconfig/i18n设置文件
    LANG=en    使用英文字体           
    sync       将数据同步写入硬盘       
    shutdonw -h now & half & poweroff  关机
    reboot     重启                  
    startx  &  init 5   进入图形介面
    /work  & ?work    向上、下查找文档内容
    chgrp      改变档案群组  chgrp testing install.log   
    chown     改变所属人   chown root:root install.log
    chmod      改变属性     chmod 777 install.log     read=4  write=2  execute=1
    cp   复制   cp filename
    rm   删除文件  rm -rf filename   强制删除文件
    rmdir   删除文件夹
    mv  移动    mv 123.txt 222.txt  重命名
    mkdir     创建文件夹
    touch     创建文件  更新当前时间
    cat       由第一行开始显示     cat |more  分页
    nl        在内容前加行号
    more  &  less   一面一面翻动
    head -n filename   显示第N行内容
    tail -n filename  显示后N行内容
    od        显示非纯文档
    df -h 显示分区空间
    du  显示目录或文件的大小
    fdisk   分区设置    fdisk -l /dev/hda  显示硬盘分区状态
    mkfs    建立各种文件系统  mkfs -t ext3  /dev/ram15  
    fsck    检查和修复LINUX档案
    ln      硬链接   ln -s  软件链接
    whereis   查找命令
    locate    查找
    find      查找   find / -name "***.***"
    which     查看工具
    whoami    显示当前用户
    gcc -v    查看GCC版本
    chattr +i filename  禁止删除   chattr -i filename  取消禁止
    lsattr    显示隐藏档属性
    updatedb  更新资料库
    mke2fs    格式化   mkfs -t ext3
    dd if=/etc/passwd f=/tmp/passwd.bak    备份
    mount     列出系统所有的分区
    mount -t iso9660 /dev/cdrom /mnt/cdrom   挂载光盘
    mount -t vfat /dev/fd0 /mnt/floppy       挂载软盘
    mount -t vfat -o iocharset=utf8,umask=000 /dev/hda2 /mnt/hda2   挂载fat32分区
    mount -t ntfs -o nls=utf8,umask=000 /dev/hda3 /mnt/hda3         挂载ntfs分区
    Linux-NTFS Project: http://linux-ntfs.sourceforge.net/
    umount /mnt/hda3  缷载
    ifconfig   显示或设置网络设备
    service network restart   重启网卡 
    ifdown eth0  关闭网卡
    ifup eth0    开启网卡
    clear    清屏
    history    历史记录       !55  执行第55个指令
    stty   设置终端    stty -a
    fdisk /mbr   删除GRUB
    at     僅進行一次的工作排程
    crontab   循環執行的例行性命令    [e]编辑,[l]显示,[r]删除任务
    &       后台运行程序    tar -zxvf 123.tar.gz & --------->后台运行
    jobs    观看后台暂停的程序   jobs -l
    fg      将后台程序调到前台   fg n ------>n是数字,可以指定进行那个程序
    bg      让工作在后台运行
    kill    结束进程    kill -9 PID     [9]强制结束,[15]正常结束,[l]列出可用的kill信号
    ps aux  查看后台程序  
    top     查看后台程序   top -d 2    每两秒更新一次        top -d 2 -p10604   观看某个PID
            top -b -n 2 > /tmp/top.txt -----> top 的資訊進行 2 次,然後將結果輸出到 /tmp/top.txt   
    pstree   以树状图显示程序    [A] ASCII 來連接, [u]列出PID, [p]列出帐号
    killall   要刪除某個服務    killall -9 httpd
    free      显示内存状态     free -m  -------->M为单位显示
    uptime    显示目前系统开机时间
    netstat   显示网络状态    netstat -tulnp------>找出目前系統上已在監聽的網路連線及其 PID
    dmesg     显示开机信息    demsg | more
    nice      设置优先权      nice -n -5 vi & -----> root 給一個 nice 植為 -5 ,用於執行 vi
    renice    调整已存在优先权
    runlevel  显示目前的runlevel
    depmod    分析可载入模块的相依性
    lsmod     显示已载入系统的模块
    modinfo   显示kernel模块的信息
    insmod    载入模块
    modprobe   自动处理可载入模块
    rmmod     删除模块
    chkconfig   检查,设置系统的各种服务     chkconfig --list ----->列出各项服务状态
    ntsysv     设置系统的各种服务
    cpio      备份文件
     

    压缩命令:
     *.Z      compress 程式壓縮的檔案;
     *.bz2    bzip2 程式壓縮的檔案;
     *.gz     gzip 程式壓縮的檔案;
     *.tar    tar 程式打包的資料,並沒有壓縮過;
     *.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮
    compress filename  压缩文件  [-d]解压  uncompress
    gzip filename   压缩  [-d]解压  zcat 123.gz 查看压缩文件内容
    bzip2 -z filename  压缩  [-d]解压   bzcat filename.bz2  查看压缩文件内容
    tar -cvf /home/123.tar /etc  打包,不压缩
    tar -xvf 123.tar   解开包
    tar -zxvf /home/123.tar.gz  gzip解压
    tar -jxvf /home/123.tar.bz2  bzip2解压
    tar -ztvf /tmp/etc.tar.gz   查看tar内容
    cpio -covB  > [file|device]   份份
    cpio -icduv < [file|device]   还原
     
    vi一般用法
    一般模式              编辑模式                  指令模式
    h                a,i,r,o,A,I,R,O             :w 保存
    j                 进入编辑模式                :w! 强制保存
    k                 dd 删除光标当前行           :q! 不保存离开
    l                 ndd 删除n                 :wq! 保存后离开
    0 移动到行首        yy 复制当前行                :e! 还原原始档
    $ 移动到行尾        nyy 复制n                  :w filename 另存为
    H 屏幕最上          p,P 粘贴                     :set nu 设置行号
    M 屏幕中央          u  撤消                      :set nonu 取消行号
    L 屏幕最下          [Ctrl]+r 重做上一个动作       ZZ 保存离开
    G 档案最后一行      [ctrl]+z 暂停退出            :set nohlsearch   永久地关闭高亮显示
    /work 向下搜索                                   :sp 同时打开两个文档
    ?work 向上搜索                                   [Ctrl]+w 两个文档设换
    gg 移动到档案第一行                              :nohlsearch    暂时关闭高亮显示
     
    认识SHELL
    alias    显示当前所有的命令别名      alias lm="ls -al"   命令别名    unalias lm 取消命令别名
    type      类似which
    exprot    设置或显示环境变量
    exprot PATH="$PATH":/sbin  添加/sbinPATH路径
    echo $PATH    显示PATH路径
    bash      进入子程序
    name=yang     设定变量
    unset name    取消变量
    echo $name    显示变量的内容
    myname="$name its me"   &   myname='$name its me'     单引号时$name失去变量内容
    ciw=/etc/sysconfig/network-scripts/     设置路径
    env      列出所有环境变量
    echo $RANDOM    显示随意产生的数
    set      设置SHELL
    PS1='[\u@\h \w \A #\#]\$ '     提示字元的設定
       [root@linux ~]# read [-pt] variable     -----------读取键盘输入的变量
       參數:
       -p  :後面可以接提示字元!
       -t  :後面可以接等待的『秒數!』
    declare    声明 shell 变量
    ulimit -a   显示所有限制资料
     ls /tmp/yang && echo "exist" || echo "not exist"
     意思是說,當 ls /tmp/yang 執行後,若正確,就執行echo "exist" ,若有問題,就執行echo "not exist"
     echo $PATH | cut -d ':' -f 5       :为分隔符,读取第5段内容
     export | cut -c 10-20      读取第1020个字节的内容
     last | grep 'root'    搜索有root的一行,[-v]反向搜索
     cat /etc/passwd | sort    排序显示
     cat /etc/passwd | wc      显示『行、字数、字节数』
    正规表示法
    [root@test root]# grep [-acinv] '搜尋字串' filename
           參數說明:
           -a :將 binary 檔案以 text 檔案的方式搜尋資料
           -c :計算找到 '搜尋字串' 的次數
           -i :忽略大小寫的不同,所以大小寫視為相同
           -n :順便輸出行號
           -v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行!
     grep -n 'the' 123.txt     搜索the字符 -----------搜尋特定字串      
     grep -n 't[ea]st' 123.txt    搜索testtaste两个字符---------利用 [] 來搜尋集合字元
     grep -n '[^g]oo' 123.txt     搜索前面不为goo-----------向選擇 [^]
     grep -n '[0-9]' 123.txt  搜索有0-9的数字
     grep -n '^the' 123.txt 搜索以the为行首-----------行首搜索^
     grep -n '^[^a-zA-Z]' 123.txt  搜索不以英文字母开头
     grep -n '[a-z]$' 123.txt    搜索以a-z结尾的行---------- 行尾搜索$
     grep -n 'g..d' 123.txt     搜索开头g结尾d字符----------任意一個字元 .
     grep -n 'ooo*' 123.txt     搜索至少有两个oo的字符---------重複字元 *
    sed    文本流编辑器    利用脚本命令来处理文本文件
    awd    模式扫描和处理语言
     nl 123.txt | sed '2,5d'   删除第二到第五行的内容
    diff     比较文件的差异
    cmp      比较两个文件是否有差异
    patch    修补文件
    pr       要打印的文件格式化
     

    帐号管理
    /etc/passwd    系统帐号信息
    /etc/shadow    帐号密码信息    MD5 32位加密
         在密码栏前面加『 * 』『 ! 』禁止使用某帐号
    /etc/group     系统群组信息
    /etc/gshadow
    newgrp    改变登陆组
    useradd  &  adduser    建立新用户  ---------> useradd -m test  自动建立用户的登入目录
              useradd -m -g pgroup test --------->指定所属级
    /etc/default/useradd   相关设定
    /etc/login.defs       UID/GID 有關的設定
    passwd    更改密码 -----------> passwd test
    usermod   修改用户帐号
    userdel   删除帐号 ----------->userdel -r test
    chsh      更换登陆系统时使用的SHELL   [-l]显示可用的SHELL;[-s]修改自己的SHELL
    chfn      改变finger指令显示的信息
    finger    查找并显示用户信息
    id        显示用户的ID ----------->  id test
    groupadd   添加组
    groupmod   usermod类似
    groupdel   删除组
    su test    更改用户   su -    进入root,且使用root的环境变量
    sudo       以其他身份来执行指令
    visudo     编辑/etc/sudoers      加入一行『 test ALL=(ALL) ALL
               %wheel ALL = (ALL) ALL               系统里所有wheel群组的用户都可用sudo
               %wheel ALL = (ALL) NOPASSWD: ALL     wheel群组所有用户都不用密码NOPASSWD
           User_Alias ADMPW = vbird, dmtsai, vbird1, vbird3         加入ADMPW
           ADMPW ALL = NOPASSWD: !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \
           !/usr/bin/passwd root      可以更改使用者密码,但不能更改root密码 (在指令前面加入 ! 代表不可)
    PAM (Pluggable Authentication Modules, 嵌入式模組)
    who & w     看谁在线                    
    last        最近登陆主机的信息
    lastlog     最近登入的時間    读取 /var/log/lastlog
    talk        与其他用户交谈
    write       发送信息    write test   [ctrl]+d 发送
    mesg        设置终端机的写入权限    mesg n 禁止接收     mesg y
    wall        向所有用户发送信息    wall this is q test
    mail        mail  
    /etc/default/useradd    家目录默认设置
    quota      显示磁盘已使用的空间与限制     quota -guvs ----->秀出目前 root 自己的 quota 限制值
               quota -vu   查询
    quotacheck   检查磁盘的使用空间与限制     quotacheck -avug  ----->將所有的在 /etc/mtab 內,含有 quota 支援的 partition 進行掃瞄
                 [-m] 强制扫描 
         quota一定要是独立的分区,要有quota.userquota.group两件文件,/etc/fstab添加一句:
         /dev/hda3 /home ext3 defaults,usrquota,grpquota 1 2
         chmod 600 quota*         设置完成,重启生效
    edquota    编辑用户或群组的quota  [u]用户,[g]群组,[p]复制,[t]设置宽限期限
               edquota -a yang       edquota -p yang -u young ----->复制   
    quotaon    开启磁盘空间限制     quotaon -auvg -------->啟動所有的具有 quota filesystem
    quotaoff   关闭磁盘空间限制     quotaoff -a  -------->關閉了 quota 的限制
    repquota -av     查閱系統內所有的具有 quota filesystem 的限值狀態
    Quota 從開始準備 filesystem 的支援到整個設定結束的主要的步驟大概是:
    1、設定 partition filesystem 支援 quota 參數:
    由於 quota 必須要讓 partition 上面的 filesystem 支援才行,一般來說, 支援度最好的是 ext2/ext3
    其他的 filesystem 類型鳥哥我是沒有試過啦! 啟動 filesystem 支援 quota 最簡單就是編輯 /etc/fstab
    使得準備要開放的 quota 磁碟可以支援 quota 囉;
    2、建立 quota 記錄檔:
    剛剛前面講過,整個 quota 進行磁碟限制值記錄的檔案是 aquota.user/aquota.group
    要建立這兩個檔案就必須要先利用 quotacheck 掃瞄才行喔!
    3、編輯 quota 限制值資料:
    再來就是使用 edquota 來編輯每個使用者或群組的可使用空間囉;
    4、重新掃瞄與啟動 quota
    設定好 quota 之後,建議可以再進行一次 quotacheck ,然後再以 quotaon 來啟動吧!

    开机流程简介
    1、載入 BIOS 的硬體資訊,並取得第一個開機裝置的代號;
    2、讀取第一個開機裝置的 MBR boot Loader (亦即是 lilo, grub, spfdisk 等等) 的開機資訊;
    3、載入 Kernel 作業系統核心資訊, Kernel 開始解壓縮,並且嘗試驅動所有硬體裝置;
    4Kernel 執行 init 程式並取得 run-level 資訊;
    5init 執行 /etc/rc.d/rc.sysinit 檔案;
    6、啟動核心的外掛模組 (/etc/modprobe.conf)
    7init 執行 run-level 的各個批次檔( Scripts )
    8init 執行 /etc/rc.d/rc.local 檔案;
    9、執行 /bin/login 程式,並等待使用者登入;
    10、登入之後開始以 Shell 控管主機。
    /etc/rc.d/rc3.d,S开头的为开机启动,K开头的为关闭,接着的数字代表执行顺序
    GRUB vga设定
    彩度\解析度  640x480  800x600  1024x768  1280x1024   bit
        256        769      771      773       775      8 bit
       32768       784      787      790       793     15 bit
       65536       785      788      791       794     16 bit
       16.8M       786      789      792       795     32 bit

    ./configure    检查系统信息       ./configure --help | more  帮助信息
    make clean     清除之前留下的文件
    make           编译
    make install   安装
    rpm -q  ----->查询是否安装             rpm -ql ------>查询该套件所有的目录
    rpm -qi ----->查询套件的说明资料       rpm -qc[d] ----->设定档与说明档
    rpm -ivh  ---->安装                    rpm -V  -------->查看套件有否更动过
    rpm -e  ------>删除                    rpm -Uvh ------->升级安装 
    --nodeps ----->强行安装                --test ----->测试安装
  • Linux查看系统配置常用命令

    2009-03-12 10:13:00

    系统

    # uname -a               # 查看内核/操作系统/CPU信息
    # head -n 1 /etc/issue   # 查看操作系统版本
    # cat /proc/cpuinfo      # 查看CPU信息
    # hostname               # 查看计算机名
    # lspci -tv              # 列出所有PCI设备
    # lsusb -tv              # 列出所有USB设备
    # lsmod                  # 列出加载的内核模块
    # env                    # 查看环境变量

    资源

    # free -m                # 查看内存使用量和交换区使用量
    # df -h                  # 查看各分区使用情况
    # du -sh <目录名>        # 查看指定目录的大小
    # grep MemTotal /proc/meminfo   # 查看内存总量
    # grep MemFree /proc/meminfo    # 查看空闲内存量
    # uptime                 # 查看系统运行时间、用户数、负载
    # cat /proc/loadavg      # 查看系统负载

    磁盘和分区

    # mount | column -t      # 查看挂接的分区状态
    # fdisk -l               # 查看所有分区
    # swapon -s              # 查看所有交换分区
    # hdparm -i /dev/hda     # 查看磁盘参数(仅适用于IDE设备)
    # dmesg | grep IDE       # 查看启动时IDE设备检测状况

    网络

    # ifconfig               # 查看所有网络接口的属性
    # iptables -L            # 查看防火墙设置
    # route -n               # 查看路由表
    # netstat -lntp          # 查看所有监听端口
    # netstat -antp          # 查看所有已经建立的连接
    # netstat -s             # 查看网络统计信息

    进程

    # ps -ef                 # 查看所有进程
    # top                    # 实时显示进程状态

    用户

    # w                      # 查看活动用户
    # id <用户名>            # 查看指定用户信息
    # last                   # 查看用户登录日志
    # cut -d: -f1 /etc/passwd   # 查看系统所有用户
    # cut -d: -f1 /etc/group    # 查看系统所有组
    # crontab -l             # 查看当前用户的计划任务

    服务

    # chkconfig --list       # 列出所有系统服务
    # chkconfig --list | grep on    # 列出所有启动的系统服务

    程序

    # rpm -qa                # 查看所有安装的软件包
  • shell之函数式脚本

    2009-03-06 22:31:28

    自己最近纯粹吃饱撑的了。
    想把多个性能测试的case用脚本去实现。
    目前已经实现了大部分了。只差一点点了。

    不止一次的问自己,真的是没有必要。自己越来越懒了。
    越来越依赖自己的脚本了。

    发现了写脚本的一个非常不错的方法。
    采用函数编程。

          gexec $search_list $proxy_list  logsave 2>&1 |tee logsave.txt #save log  #去所有的searchproxy上去保存日志

    可以在每个机器上,修改启动脚本,增加关于logsave的定义,实现不同角色的个性定义。

    发现这个方法非常的棒,解决了不少问题,记录一下。

    abenchloadm()

    {

             [ $# -eq 0 ]&&echo "abenchloadm paramters ip port datadir

             example abenchload  -s 7200 -p 18 -k 119.42.239.38 2312 offer_url"&&return||echo "OK,start abench"

             [[ `echo $*|grep "\-p"` ]]&&(echo $*|grep "\-k"&&print "OK,-p with -k"||print "Be carefull , no -k")

             #all the history operations would be record in the abench.log , you can use it to check history .

             seven #reload seven.sh and $USER.sh

             abench_log=abench.log

             now=`date +%Y%m%d%H%M`

             #show the start time and parameters and save them to abench.log

             echo $*

             echo "Start at $now

             $* " >>$abench_log

             #invoke abench and give it the parameters

             abench -l abench_$now.log $*  2>&1|tee abench_$now

             timestop=`date +"%m/%d/%Y %H:%M"`

             echo "End at `date +%Y%m%d%H%M`    " >>$abench_log

             #get the time and format it for simon

             timestart="${now:4:2}/${now:6:2}/${now:0:4} ${now:8:2}:${now:10}"

             #invoke report function for get the urls of simon and some basic infomation

             reportm "$timestart"  "$timestop"  >report_${now}.htm   #生成相关simon图报告,此函数不同之前的report,它可以提供机器列表的资源占用信息,比如cpumemuser之类的,并统计出search的平均指标作为参考。

             echo start save log

             gexec $search_list $proxy_list  logsave 2>&1 |tee logsave.txt #save log  #去所有的searchproxy上去保存日志

             echo start get config

             gexec $search_list $proxy_list  '{ cd $install_dir/etc; getconfig;check root=; } ' > config.txt 2>&1 #check config  #去所有机器上收集配置信息,以备检查。

             echo start check log

             glogcheck|uniq -c > logcheck.txt  2>&1 #check log  #去所有机器上分析日志

             #mail you the result by attachments

             echo start send mail

             echo "$*"|mutt -s AT@`hostname` -a abench_$now -a report_${now}.htm -a logsave.txt -a logcheck.txt -a config.txt $mail_addr  #发送所有结果到你的工作信箱

             #if you setted the mobie_mail var , it will notice you by a sms

             if [[ -n $mobile_mail ]]    #设置手机邮箱的话,就发短信提醒。

             then

                       qps="qps=`cat abench_$now|grep "query per second"|awk -F: '{print $2}'`"

                       art="art=`cat abench_$now|grep "average response time"|awk -F: '{print $2}'`"

                       echo "`cat abench_$now` "|mutt -s "$qps $art cmd abenchloadm $*"  $mobile_mail

             fi

    }

     



391/212>
Open Toolbar