海是我向往的地方,吸纳和咆哮是他的魅力!!!

发布新日志

  • 写给浮躁的IT同仁(转)

    meilirensheng 发布于 2009-10-09 12:11:24

    写给浮躁的IT同仁(转)

    2009-01-04 10:31:42

        1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异。

       2.初学者请不要看太多太多的书那会误人子弟的,先找本系统的学,很多人用了很久都是只对部分功能熟悉而已,不系统还是不够的。

       3.看帮助,不要因为很难而自己是初学者所以就不看;帮助永远是最好的参考手册,虽然帮助的文字有时候很难看懂,总觉得不够直观。

       4.不要被对象、属性、方法等词汇所迷惑;最根本的是先了解最基础知识。

       5.不要放过任何一个看上去很简单的小问题--他们往往并不那么简单,或者可以引伸出很多知识点;不会举一反三你就永远学不会。

       6.知道一点东西,并不能说明你会写脚本,脚本是需要经验积累的。

       7.学脚本并不难,JSP、ASP、PHP等等也不过如此--难的是长期坚持实践和不遗余力的博览群书。

       8.看再多的书是学不全脚本的,要多实践。

       9.把时髦的技术挂在嘴边,还不如把过时的技术记在心里。

       10.学习脚本最好的方法之一就是多练习。

       11.在任何时刻都不要认为自己手中的书已经足够了。

       12.看得懂的书,请仔细看;看不懂的书,请硬着头皮看。

       13.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;

       14.请把书上的例子亲手到电脑上实践,即使配套光盘中有源文件;

       15.把在书中看到的有意义的例子扩充;并将其切实的运用到自己的工作中。

       16.不要漏掉书中任何一个练习——请全部做完并记录下思路;

        17.当你用脚本到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个代码的完整性,然后分析自己的错误并重新编写和工作。

       18.别心急,写脚本确实不容易;水平是在不断的实践中完善和发展的;

       19.每学到一个脚本难点的时候,尝试着对别人讲解这个知识点并让他理解----你能讲清楚才说明你真的理解了。

       20.记录下在和别人交流时发现的自己忽视或不理解的知识点。

       21.保存好你做过的所有的源文件----那是你最好的积累之一。

       22.对于网络,还是希望大家能多利用一下,很多问题不是非要到论坛来问的,首先你要学会自己找答案,比如google、百度都是很好的搜索引擎,你只要输入关键字就能找到很多相关资料,别老是等待别人给你希望,看的出你平时一定也很懒!

       23.到一个论坛,你学会去看以前的帖子,不要什么都不看就发帖子问,也许你的问题早就有人问过了,你再问,别人已经不想再重复了,做为初学者,谁也不希望自己的帖子没人回的。

       24,虽然不是打击初学者,但是这句话还是要说:论坛论坛,就是大家讨论的地方,如果你总期望有高手总无偿指点你,除非他是你亲戚!!讨论者,起码是水平相当的才有讨论的说法,如果水平真差距太远了,连基本操作都需要别人给解答,谁还跟你讨论呢。
      25、不要因为工作简单就不重视,简单的工作做好了能体现个人的态度,简单的工作做好之后才能够有效管理作简单工作的人。

      26、少发牢骚,多提建设性意见,前者说不定哪天会被领导听见,也影响自己的心情;后者可能会得到领导重视,说不定哪天机会就来了,再说以解决问题的思路来看待问题,不断的思考就会不断进步,也有利于良好心态的形成

      27、做好自己能够掌控的事情,对于自己无法影响的东西,少想、少说

      28、吃亏就是占便宜

      29、不要追求绝对公平,否则是自寻烦恼

       浮躁的人容易问:我到底该学什么;----别问,学就对了;

       浮躁的人容易问:Js有钱途吗;----建议你去抢银行;

       浮躁的人容易说:我要中文版!我英文不行!----不行?学呀!

       浮躁的人经常说:啊呀,今天放松一下,从明天开始我一定认真学!

       浮躁的人分两种:只观望而不学的人;只学而不坚持的人;

       浮躁的人永远不是一个高手。

  • 几道面试题(转)

    瑜伽流武者 发布于 2009-10-04 04:35:58

    一、Web基础知识(HTML、XML、CSS基础语法):
    1、HTML/XML规范中,元素结束标签是以尖括号括起来,并以/还是\开头再加上元素名称?即body的结束标签是</body>还是<\body>
    2、符合XHTML规范的文档一定符合XML规范吗?XSL和HTML的文档呢?
    3、XML规范中,第一行必须是<?xml… 还是<!xml… 开头?
    4、一个HTML文档必须包含三个元素,它们是head、body和哪个?
    5、HTML中文档内联注释应该是以<!-开头还是<!--或者<?-,又以什么结尾?
    6、Javascrīpt脚本必须写在什么标签之内。
    7、FireFox浏览器是否支持VBscrīpt脚本?
    8、我们现在使用的IE的版本一般是多少,IE的英文全称是什么?
    9、CSS规范中,每一条样式的结束符是;(分号)还是: (冒号) ?样式名与样式值之间的分隔符是:(冒号)还是=(等号) ?
    10、CSS规范中,.(句点)后面跟一个名称代表什么含义?#(井号)后面跟一个名称代表什么含义?如果要对一个元素设置CSS样式,应将CSS样式写在它的什么属性内?
     
     
    1、</body>
    2、XHTML和XSL都必然符合XML规范,HTML不符合。
    3、<?xml
    4、html
    5、<!--和-->
    6、<scrīpt>
    7、不支持
    8、Internet Explorer 6.0 SP2/5.5/5.0/6.0 SP1/7.0 beta2/7.0 beta3都算对。
    9、;,:和=都可以
    10、.后面跟个名称表示文档中所有class属性值包含这个名称的应用其后样式,#后面跟个名称表示文档中ID为此名称的元素应用其后样式。
    二:Web进阶知识(javascrīpt、DOM、CSS进阶):
    1、试图说明setTimeout和setInterval的不同。
    2、请指出body是什么元素的属性,alert是什么元素的方法。
    3、onblur事件在什么时机被触发?onmouseover事件当鼠标在元素上移动时是仅触发一次还是连续触发?那么onmouseout呢?
    4、在CSS中a:hover、a:link各表示什么意思?a与A是否有不同?XHTML规范要求所有标签名称必须大写还是小写?属性名称呢?
    5、在<form>中的元素不能在脚本中直接用元素ID来访问,这个时候我们一般用document的一个方法来获取这个元素。这个方法是:
    getElementByID、getElementById、getNodeById、getNodeByID、GetNodeById。
    6、由于class是javascrīpt中的保留字,所以元素的class属性在javascrīpt中没有用class这个名称,那么是用什么名称来代替的?
    7、如何简单的使一个变量的值为NaN?
    8、试说明parent和opener属性各代表什么?
    9、指出border-style样式在javascrīpt应如何访问?
    10、指出div与span的不同。
     
    1、setTimeout在经过指定时间后执行一次,setInterval则是经过指定时间就执行一次。
    2、window.document、window
    3、onblur在控件失去焦点时触发,onmouseover是连续触发,onmouseout仅触发一次。
    4、a:hover表示当鼠标放在连接上时,连接该使用什么样式,a:link表示正常情况下连接该使用什么样式,在现行的CSS标准中不区分大小写,所以a与A没有不同。XHTML要求所有的标签名和属性名都必须小写。
    5、getElementById
    6、className
    7、a = 1/0;
    8、parent代表父框架,opener代表打开这个窗口的窗口
    9、element.style.borderStyle
    10、默认的display样式不同,div是block而span是inline;

  • ERP专用名词(转)

    瑜伽流武者 发布于 2009-10-04 01:34:50

       

    ERP (Enterprise Resource Planning) 企业资源计划
        ERP将企业内部所有资源整合在一起,对采购、生产、成本、库存、分销、运输、财务、人力资源进行规划,从而达到最佳资源组合,取得最佳效益。
        ERP是由不同的功能模块组成的软件包,是旨在对企业的多种资源进行计划和实现物流、资金流、
    信息流三流统一。是实现对整个供应链的有效管理,体现精益生产,同步工程和敏捷制造的思想,体现
    事先计划与事中控制的思想。它整合了企业管理理念、业务流程、基础数据。
        企业上ERP系统,是一个重组业务流程、引进先进管理理念的过程,它是将企业各方面包括人、
    财、供销等在内的资源充分调配和平衡,使企业在激烈的市场竞争中全方位地发挥充分的能力从
    而取得最好的经济效益。

    ERP专用名词解释:

    ERP (Enterprise Resource Planning) 企业资源管理
    CRM (Customer Relationship Management) 客户关系管理
    SCM (Supply Chain Management ) 供应链管理
    ECN (Engineer Change Note) 工程变更注记
    PDM (Product Data Management) 产品数据管理
    MTL (Material Management System) 物料管理系统
    MPS (Master Production Scheduling) 主生产计划

    MES (Manufacturing Execution System) 制造执行系统
    KM (Knowledge Management) 知识管理
    EIS (Excutive Information System) 决策系统
    CRP (Capacity Requirement Planning)产能需求规划
    BPR (Business Process Reengineering) 企业流程再造
    BOM (Bill of Material)物料清单 


    CPC()协同产品商务

    ASP (Application Service Provider)  外包

    EAI (Enterprise Application Intergation)企业应用集成

    BIS(Busness Intelligent )商业智能系统

    HR(Human Resource)人力资源

    BPM(Busines Process Management)业务流程重组

    EIP(Enterprise Information Portal)企业信息门户

    CC (Cooprate Commerce) 协同商务

  • 导入导出文件测试点

    liyuan_400 发布于 2009-08-19 19:11:30

    1.1数据接口文件的测试方法:

     1.1.1 导出:

    1.         文件名的正确验证(如果导出文件命名中有中文需详细关注)

    2.         导出文件格式的验证(如之间的分割符,是否有表头等,换行是否正确)

    3.         是否在设定的时间生成导出文件

    4.         导出出错时系统如何处理(如是否正常发送报警邮件,邮件的格式和内容是否正确)

    5.         导出文件的格式是否正确(如字段是否正常,分割符,换行是否正确)

    6.         能否按配置中的设置导入正确的路径下

    7.         接口文件的内容验证(如特殊数据类型(日期)是如何处理的,某字段值为空时如何处理,各个字段值内容是否正确)

    1.1.2 导入:

    1.         定时抓取导入的文件是否正确

    2.         抓取导入的文件时,抓取失败系统如何处理(例如发送报警邮件)

    3.         修改要导入的文件格式(包括多列、中间分割符不正确等),系统能否抓取导入文件

    4.         修改要导入的文件内容(包括,数据类型不正确、非空字段为空等),系统能否抓取,失败如何处理

    5.         导入的文件是否正常入库(包含特殊字符,数据库的转义字符等,如何处理)

     

    1.2 关于数据报表的测试 

    1.业务性数据报表

     

      测试方法:通过增加、删除、修改相关业务或相关业务的参数,查看统计报表数据变化和数据准确性

     

    2.只有统计功能的数据仓库类报表

     

       测试方法:1.建立数据仓库模型,模拟所有的应用表

                    2.通过SQL语句和手工计算,对数据进行对比

  • 口语1

    rejoicexu 发布于 2007-03-21 15:50:52

       

    Pain past is pleasure.    过去的痛苦就是快乐.

     

    No sweet without sweat.  不吃苦就没有幸福.

     

    I don’t have the nerve to do it.   我没有勇气做

     

    Same on you. 彼此彼此.

     

    She gave me the cold shoulder.  她对我很冷淡.

     

    It never rains but it pours.  屋漏偏逢连夜雨.

     

    I am mad at myself.  我生自己的气.

     

    What did you decide?  你说怎么办?

     

    Excuse the mess. 抱歉屋里很乱

     

    Please look us up.  常来玩

     

    He is a workaholic.  他是工作狂

     

    He is restless. 他闲不住

     

    Burn the candle at both ends.  他身体透支

     

    You seem to have some reservation.  你似乎有所保留

     

    Is that it?  就这些了吗?

     

    What will be , will be.  该来的就会来.

     

    Here you go . 就是这样, 就这么做.

     

    I got away with it.  我侥幸过关.

     

    I bombed on the exam.  考砸了.

     

    God only knows .  天知道


    I screwded up. 我惨了.

     


  • 口语2 (待续)

    rejoicexu 发布于 2007-03-22 14:51:36

           

    I am counting on it.   我希望如此

     

    I will get back to you. 待会儿找你

     

    That is really something.  真了不起

     

    Don’t count yr chickens before they hatch.  别打如意算盘

     

    Don’t bother.  别管我

     

    Take your medicine like a man.   挺起来

     

    Don’t push me around.  别哄我了

     

    Don’t judge a book by its cover.  不要以貌取人

     

    Still waters run deep.  真人不露相

     

    That is backbreaking work.  这活累人

     

    That is what friends are for.  朋友就是这样的嘛

     

    Keeping busy?  还忙吗

     

    There is a first time for everything.  万事都有开头

     

    You chicken!  胆小鬼

     

    We will hit the road.  马上出发

     

    There’s a big hole in my head.  我忘了

     

    Not that I know of   没这回事

     

    That’s hot air!  胡扯

     

    So they say.  他们都这么说

     

    It’s a snap.  没问题

     

    No sweat.  毫无困难

     

    Let us forgive and forget.   让我们言归和好

     

    Let’s make up.  我们讲和吧


  • 口语3

    rejoicexu 发布于 2007-03-23 12:40:18

           

    Old pal    哥们

     

    He has inherited his father’s brains.   继承了优点

     

    You have a special way with kids.  You are wonderful with kids.  对孩子很有一套

     

    What’s gotten into you?  / what are you up to?   你忙什么呢?

     

    What a drag!   没劲!

     

    Check  买单

     

    You name the day.  你定日子

     

    Do you know his whereabouts ?   你知道他的下落吗?

     

    Are you through?   你有完没完?

     

    Same old story.   老一套

     

    Put up or shut up.  不要光说不练

     

    Stick around.  再待会儿

     

    I sing off-key.  我五音不全

     

    I will pass.  我还是免了吧

     

    I have no ear for music.  没有乐感

     

    He hit the roof/ceiling.  大怒

     

    Hit the spot!   恰恰合适

     

    I will jump at the chance. /opportunity.  我会抓住机会.

     

    Now comes the good part.   下面精彩的部分来了.
     
  • 口语

    rejoicexu 发布于 2007-08-21 17:10:36

       
    1. Don't pass up any chances.
    2. you sly dog 你这个狡诈的家伙
    3. you have common sense. 你的常识很丰富
    4. it sucks 讨厌
    5. it really pissed me off. 真令人生气
    6. we are stuck
       we are trapped 我们被堵死了 (赌车)
    7. money talks. 有钱能使鬼推磨
    8. we are ripped off
    9. life is full of ups and downs.
    10. what a day!
    11. give a little extra
    12. not likely.
    13. that's music to my ears.
    13. get right to work
    14. i comprehend the situation.
    15. same as ever
    16. i am hanging in there.
    17. u can say that again
    18. i get the picture.
    19. chances are slim
    20. traffic is bumper to bumper.
    21. can you hold a lot?
    22. far from it.
    23. no way!
    24. i am feeling under the weather.
    25. my mouth is watering.
    26. it's a pie in the sky.
    27. it is out of the question.
    28. i couldn't care less.
    29. u have an eye for beauty.
    30. that's cutting it close.
    31. that's a close call.
    32. everything is goofing around.
    33. i have sth pressing.
    34. i am already locked into sth
    35. it stinks!
    36. the food is stale.
    37. be good
    38. don't yell
    39. that's enough.
    40. the company is in the red.

  • aimei

    rejoicexu 发布于 2009-03-07 22:52:32


    time goes, you say?
    no, time stays,we go

    All you’ve got to do is decide to go and the hardest part is over. So go!

    I love three things; the sun, the moon and you 。 the sun for the day 。 the moon for the night 。 and you for ever

    theres a danger in loving somebody too much

    Time heals everything,that’s only outsiders say.

    love is too short,forgetting is too long

    There is no remedy for love but to love more

    For you a thousand times over

    double is trouble, single is simple

  • english slang

    rejoicexu 发布于 2009-07-20 11:43:51

    Be in the air 将要发生的事情
    Clear the air 消除误会
    Cost an arm and a leg 极其昂贵
    A bad egg 缺乏道德的人
    In the Bag 稳操胜券
    In the balance 未知的,不可预测的
    Ring a bell 看上去或听起来非常熟悉
    Tighten one's belt 节衣缩食
    Get to the bottom of something 弄清真相
    Round the clock 夜以继日的
    Keep one's cool 保持冷静
    Fall on deaf ears 不加理睬的,不听取
    Live it up 狂欢一场
    The bottom line 本质内容
    Over the moon 欣喜若狂
    Get a move on 赶快
    Over and above 除…这外,额外的
    On a shoestring 生活拮据
  • Performance testing strategy

    rejoicexu 发布于 2009-08-18 21:24:33

      需求分析问题: 

      1.刚开始最好不要上来就跟客户谈,某个性能点需要什么样的指标,比如支持多少人同时登陆,等等。一上来最主要的事情是了解整个系统的作用,用户,部署的方式,约束,上线时间,等等,目的是让自己能慢慢的站在客户角度来看待这个系统,通过自己的知识,想客户所想,忧客户所忧,因为我们的目的就是要让客户满意么。
      注意性能测试场景选择的原则:
      a.重要的(业务上),
      b.重复的(最常用的模块),
      c.重量级的(消耗大量系统资源的)
      具体性能指标分为几类类:
      a.系统容量(数据容量、用户量、并发用户量),
      b.系统并发度指标(注册用户、在线用户、并发用户),
      c.响应度指标(正常压力下响应能力、峰值压力下的响应能力,以及异常压力下的响应能力)

      2.理解整个系统及其实现之后,再列出自己分析得到的性能需求点。

      3.询问客户的具体性能需求,共同分析,是否测试,测试的优先级。

      4.写出性能测试计划和用例,并要得到客户认可。

      性能测试策略:

      1.单一性能点,多用户测试。测试过程可以隔离测试性能场景,先单独测试加压每种性能需求点,比如用户登陆,可以单独模拟此需求,建立比如50人并发登陆的场景。但此种场景并非是用户实际使用情况,不可能有个系统大家只是在拼命的登陆,而不作其他事情。但是,如果在做别的事情,那么同时再有50人并发登陆的话,那这个登陆时间会大大的延长的。所以此场景的设计仅仅为了检查这一个模块的性能水平。

      2.隔离之后,再逐步建立混合的性能场景。比如登陆的同时有人在浏览、查询、写入系统。但是此时只加载20%的负载。这一步主要是一个集成测试,考虑各个功能模块之间是否有影响,是否有对某些资源的抢夺等问题。同时找出Top Time Transaction

      3.如果上一步没问题了,这次就加压100%,看看在真正我们规定的要求下,系统各项性能指标如何,同时对本次测试结果作为Base Line,用来性能调优之后的比较。
  • 网络学习日志(四)--linux下的抓包工具tcpdump

    angelets 发布于 2009-07-30 17:27:18

    由于有个项目涉及到TCP、HTTP、Soap的一些东西,于是回顾了一下以前曾经学过的东西,并学到了一些新东西,以此记录。根据我的逐步学习过程,分了以下5个部分。

    1.由netstat查看网络情况,引出的TCP建立连接、终止连接过程,以及TCP状态分析;

    2.Soap=XML+HTTP引出的HTTP协议分析;

    3.Soap(Simple Object Access Protocol)简单对象访问协议分析及应用;

    4.番外一:awk的使用

    5.番外二:Linux下抓包工具

    --------------------------篇四-------------------------------------

    这篇讲linux下的抓包工具。

    抓包工具比较好用的有两个,一个是snort,一个是tcpdump,这次不说snort了,觉得这个工具虽然很强大,但是比较复杂,还是tcpdump比较简单。tcpdump windows、linux版本均有。linux版本可以在以下网站下载:www.tcpdump.org.

    安装好tcpdump之后,运行tcpdump:

    1. tcpdump -D 获取网络适配器列表,以下是在windows上获取到的结果:

    1.\Device\PssdkLoopback (PSSDK Loopback Ethernet Emulation Adapter)
    2.\Device\{CF587901-C85F-4FD6-896F-D977DEFE76EC} (Intel(R) PRO/100 VE Network Co
    nnection)

    2. tcpdump -i <需要监控的网络适配器编号>,例如我想监控lo(127.0.0.1),即上面列表中的1.\Device\PssdkLoopback: (windows上特有的,linux不适用)

    tcpdump -i 1

    如果不使用-i来定义监控适配器的话,默认使用列表中的第一个;

    3. 监控主机为192.9.200.59上8000端口的tcp协议

    tcpdump host 192.9.200.59 and tcp port 8000

    4. 如果想要显示数据包的内容,需要使用-X参数,如,我想要显示捕获的http数据包http header的内容:

    tcpdump -X host 192.9.200.59 and tcp port 8000

    显示结果如下:

    22:13:19.717472 IP testhost59.12535 > liujuan59.8000: . 1:330(329) ack 1 win 327
    8
            0x0000:  4500 0171 e616 0000 8006 cb2b 0000 0000  E..q.......+....
            0x0010:  c009 c83b 30f7 1f40 0000 0002 0000 0002  ...;0..@........
            0x0020:  5010 8000 b066 0000 504f 5354 202f 2048  P....f..POST./.H
            0x0030:  5454 502f 312e 310d 0a43 6f6e 7465 6e74  TTP/1.1..Content
            0x0040:  2d54 7970 653a 2074 6578 742f 786d 6c3b  -Type:.text/xml;
            0x0050:  2063                                     .c

    可以看到该结果只显示了http头的一部分,没有显示全,是因为tcpdump默认将显示的数据长度截断了,可以使用-s后面加数据长度,来设置数据显示长度:

    tcpdump -X -s 0 host 192.9.200.59 and tcp port 8000

    以上的例子中,-s 0 表示自动设置长度使其能够显示所有数据。

    5. 捕获的数据太多,不断刷屏,可能需要将数据内容记录到文件里,需要使用-w参数

    tcpdump -X -s 0 -w aaa host 192.9.200.59 and tcp port 8000

    则将之前显示在屏幕中的内容,写入tcpdump可执行文件同级目录下的aaa文件中。

    文件查看方式如下,需要使用-r参数:

    tcpdump -X -s 0 -r aaa host 192.9.200.59 and tcp port 8000

    如果这样写:

    tcpdump -r aaa

    则只能看到最简单的数据传输交互过程,看不到数据包内容,查看时也需要使用相应的参数。

    6.总结

    总结一下,tcpdump的参数分两个部分,选项(Options)和表达式(expression):

    tcpdump [ -adeflnNOpqRStuvxX ] [ -c count ]
                   [ -C file_size ] [ -F file ]
                   [ -i interface ] [ -m module ] [ -r file ]
                   [ -s snaplen ] [ -T type ] [ -w file ]
                   [ -E algo:secret ] [ expression ]

     

  • Linux学习日志(一)---文件权限

    angelets 发布于 2009-08-04 23:24:28

    1.使用ls -l命令显示文件的详细信息,包括权限:

    yekai@kebao:/media/sda5/软件压缩/Linux$ ls -lh
    总用量 191M
    -rwxrwx--- 1 root plugdev 18M 2007-02-28 18:05 ActionCube_v0.92.tar.bz2
    -rwxrwx--- 1 root plugdev 60M 2007-04-30 22:52 nexuiz-223.zip
    -rwxrwx--- 1 root plugdev 7.4M 2007-04-25 02:16 stardict-oxford-gb-2.4.2.tar.bz2
    -rwxrwx--- 1 root plugdev 102M 2007-05-01 18:22 tremulous-1.1.0-installer.x86.run
    -rwxrwx--- 1 root plugdev 4.9M 2007-04-30 14:32 wqy-bitmapfont-0.8.1-7_all.deb.bin

    其中显示的字符表示的权限信息-rwxrwx--- 中,第一位表示是文件还是目录,第二位到第十位表示权限。

    2.权限中第一位字符的含义

    d:表示这是一个目录,事实上在ext2fs中,目录是一个特殊的文件
    -:表示这是一个普通的文件
    l:表示这是一个符号链接文件,实际上它指向另一个文件
    b、c:分别表示区块设备和其他的外围设备,是特殊类型的文件
    s、p:这些文件关系到系统的数据结构和管道,通常很少见到

    3.权限中第二到第十位的含义

    第2~10个字符当中的每3个为一组,左边三个字符表示所有者权限,中间3个字符表示与所有者同一组的用户的权限,右边3个字符是其他用户的权限

    r(Read):对文件,具有读取文件内容的权限;对目录,具有浏览目录的权限。
    w(Write):对文件,具有新增、修改文件内容的权限;对目录,具有删除、移动目录内文件的权限。
    x(execute):对文件,具有执行文件的权限;对目录,具有进入目录的权限。


    下面举例说明:
    -rwx------: 文件所有者对文件具有读取、写入和执行的权限。
    -rwxr―-r--: 文件所有者具有读、写与执行的权限,其他用户则具有读取的权限。
    -rw-rw-r-x: 文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
    drwx--x--x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。
    drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。


    4.使用chmod和数字改变文件或目录的访问权限

    文件和目录的权限表示,是用rwx这三个字符来代表所有者、用户组和其他用户的权限。有时候,字符似乎过于麻烦,因此还有另外一种方法是以数字来表示权限,而且仅需三个数字。

    r:对应数值4
    w:对应数值2
    x:对应数值1
    -:对应数值0

    解释:我们将rwx看成二进制数,如果有则有1表示,没有则有0表示,那么rwx r-x r- -则可以表示成为:111 101 100 ,再将其每三位转换成为一个十进制数,就是754。

    例如,我们想让a.txt这个文件的权限为:

     权限  自己 同组用户   其他用户
     可读  是  是  是
     可写  是  是  
     可执行      

    根据上表得到权限串为:rw-rw-r--,转换成二进制数就是110 110 100,再每三位转换成为一个十进制数,就得到664,因此需要执行的执行命令为:
    [root@localhost ~]# chmod 664 a.txt

    5.批量修改权限

    如果需要一次修改某个目录下所有文件的权限,包括子目录中的文件权限也要修改,要使用参数-R表示启动递归处理。
    例如:

    [root@localhost ~]# chmod 777 /home/user 注:仅把/home/user目录的权限设置为rwxrwxrwx
    [root@localhost ~]# chmod -R 777 /home/user 注:表示将整个/home/user目录与其中的文件和子目录的权限都设置为rwxrwxrwx

    6.使用命令chown改变目录或文件的所有权

    文件与目录不仅可以改变权限,其所有权及所属用户组也能修改,和设置权限类似,用户可以通过图形界面来设置,或执行chown命令来修改。
    我们先执行ls -l看看目录情况:

    [root@localhost ~]# ls -l
    总用量 368
    -rwxrwxrwx 1 root root 12172 8月 15 23:18 conkyrc.sample

    可以看到conkyrc.sample文件的所属用户组为root,所有者为root。
    执行下面命令,把conkyrc.sample文件的所有权转移到用户user:

    [root@localhost ~]# chown user conkyrc.sample
    [root@localhost ~]# ls -l
    总用量 368
    -rwxrwxrwx 1 user root 12172 8月 15 23:18 conkyrc.sample

    要改变所属组,可使用下面命令:

    [root@localhost ~]# chown :users conkyrc.sample
    [root@localhost ~]# ls -l
    总用量 368
    -rwxrwxrwx 1 user users 12172 8月 15 23:18 conkyrc.sample

    7.批量修改文件权限

    要修改目录的权限,使用-R参数就可以了,方法和前面一样。



     

  • awk的学习和使用(一)

    angelets 发布于 2009-08-11 09:29:45

    最近接触了linux的使用和一些命令、工具的使用,awk恐怕是linux用处最广的工具之一了,今天开始,我打算记录下我的学习过程。


    一.awk的简介

    与sed和grep很相似,awk是一种样式扫描与处理工具,其功能远远强于sed和grep,除了几乎所有的sed和grep功能之外,awk还可以进行样式装入,流控制,数学运算符,进程控制语句,甚至内置的变量和函数。它具备了一个完整的语言所应具备的特性,实际上awk确实拥有自己的语言,awk程序设计语言,awk的三位创建者已将其定义为:awk样式扫描和处理语言。

    基于文本的样式扫描和处理是我们经常要做的工作,比如从一个上千行的具有一定格式的文本文件中找出满足要求的行并输出到一个新文本,就可以使用awk。再比如,监控网络时,由于网络上流动的数据非常多,如果需要获得某些特定的数据,使用awk过滤。简而言之,awk就是一个强大的文本处理工具。

    在这里有一个可遵循的一般原则:如果你用普通的shell工具或shell script有困难的话,试试awk,如果awk仍不能解决问题,则便用C语言,如果C语言仍然失败,则移至C++。

    二.awk的调用方式

    1.awk命令行的方式,适用于解决简单问题,例如:打印testfile文本中第一列为abc的所有行(省略了print)

    [root@test myself]# awk '$1==abc' testfile

    2.使用-f选项调用awk程序文件,例如:将一段awk程序保存到文本,名为testawk1,在命令行中执行该文件

    [root@test myself]# awk -f testawk1 testfile

    3.利用命令解释器调用awk,例如:将一段awk程序保存至文本,名为myawk,与前面不同的是该文本首行需要添加:#!/bin/awk -f ,保存后赋予该文件执行权限,命令行中直接调用:

    [root@test myself]# myawk testfile

    三.awk语法

    awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]

    -F re : 允许awk更改其字段分隔符。

    parameter :

    'prog' : awk程序语句段,必须使用单引号‘’引起来,防止被shell解释。

    其标准形式为'pattern{action}'。前面第二节中的第一小节举例:awk '$1==abc' testfile 其中'$1==abc'就是pattern,起过滤作用,即:只有符合$1==abc的行,才执行执行{action}操作。但此例中省略了{action},此时将默认执行print操作,即打印到标准输出。

    pattern和{action}二者可以省略其中之一,但是不能两者同时省略。pattern省略时表示不对任何行进行过滤。

    {action}中的语句之间,使用;进行分隔,使用#进行注释。

    -f progfile : 允许awk调用并执行progfile文件。progfile必须是一个符合awk语法的文本文件。

    in_file : awk的输入文件。awk允许对多个输入文件进行处理,其间用,隔开,awk不会修改输入文件。如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出。awk支持输入输出重定向。

    四.记录、字段和内置变量

    记录和字段:在awk中,缺省情况下会将文本中的一行视为一个记录,而将一行中的某一部分视作一个字段,这与数据库中对数据的处理方式类似。比如数据库中某个数据表的第一个字段名叫做ID,第二个叫做Name,在awk中使用$1、$2表示第一个字段、第二个字段。特殊的,awk用$0来表示整个行(整条记录)。

    分隔符:不同的字段之间是用称作分隔符的字符分隔开的。系统默认的分隔符是空格。awk允许在命令行中用-F re的形式来改变这个分隔符。事实上,awk用一个内置的变量FS来记忆这个分隔符。

    内置变量:除了FS外,awk中有好几个这样的内置变量,如记录和记录之间(行与行之间)的分隔符使用RS表示,当前工作的记录数为NR等等。这些内置的变量可以在awk程序中引用或修改,例如,可以利用NR变量在模式匹配中指定工作范围,也可以通过修改记录分隔符RS让一个特殊字符而不是换行符作为记录的分隔符。例如,以下语句表示,显示文本文件第7行到第15行中以%分给的第1、3、7个字段值。

    awk -F % 'NR==7,NR==15 {printf $1 $3 $7}' testfile

    awk的其他内置变量:A=awk,N=nawk,P=POSIX awk。以下内置变量以系统中的帮助为准(不同系统下的awk可能有所出入)。

    P ENVIRON UNIX环境变量
    A FILENAME 当前输入文件的名字
    P FNR 当前记录数
    A FS 输入字段分隔符 空格 
    A NF 当前记录中的字段个数
    A NR 已经读出的记录数
    A OFMT 数字的输出格式 %.6g
    A OFS 输出字段分隔符 空格
    A ORS 输出的记录分隔符 新行
    A RS 输入的记录他隔符 新行

    五.内置函数

    例:显示文件myfile中的行号和第3字段:

    $awk '{printf"%03d%s\n",NR,$1}' myfile

    其中,printf即内部函数,该函数类似c++中的printf,可以对输出格式进行控制;

    例:下面的示例显示了内置变量和内置函数length()的使用:

    $awk 'length($0)>80 {print NR}' myfile

    该命令行将显示文本myfile中所有超过80个字符的行号,在这里,用$0表示整个记录(行),同时,内置变量NR不使用标志符'$'。

    例:作为一个较为实际的例子,我们假设要对UNIX中的用户进行安全性检查,方法是考察/etc下的passwd文件,检查其中的passwd字段(第二字段)是否为"*",如不为"*",则表示该用户没有设置密码,显示出这些用户名(第一字段)。我们可以用如下语句实现:

    #awk -F: '$2=="" {printf("%s no password!\n",$1' /etc/passwd

    在这个示例中,passwd文件的字段分隔符是“:”,因此,必须用-F:来更改默认的字段分隔符,这个示例中也涉及到了内置函数printf的使用。

    其他内置函数:(以自己系统中的帮助为准)

    N gsub(reg,string,target) 每次常规表达式reg匹配时替换target中的string
    N index(search,string) 返回string中search串的位置
    A length(string) 求串string中的字符个数
    N match(string,reg) 返回常规表达式reg匹配的string中的位置
    N printf(format,variable) 格式化输出,按format提供的格式输出变量variable。
    N split(string,store,delim) 根据分界符delim,分解string为store的数组元素
    N sprintf(format,variable) 返回一个包含基于format的格式化数据,variables是要放到串中的数据
    G strftime(format,timestamp) 返回一个基于format的日期或者时间串,timestmp是systime()函数返回的时间
    N sub(reg,string,target) 第一次当常规表达式reg匹配,替换target串中的字符串
    A substr(string,position,len) 返回一个以position开始len个字符的子串
    P totower(string) 返回string中对应的小写字符
    P toupper(string) 返回string中对应的大写字符
    A atan(x,y) x的余切(弧度)
    N cos(x) x的余弦(弧度)
    A exp(x) e的x幂
    A int(x) x的整数部分
    A log(x) x的自然对数值
    N rand() 0-1之间的随机数
    N sin(x) x的正弦(弧度)
    A sqrt(x) x的平方根
    A srand(x) 初始化随机数发生器。如果忽略x,则使用system()
    G system() 返回自1970年1月1日以来经过的时间(按秒计算)

    六.awk的自定义变量

    awk允许用户在awk程序语句中定义并调用自已的变量。当然这种变量不能与内置变量及其它awk保留字相同。与C语言不同的是,awk中不需要对变量进行初始化,awk根据其在awk中第一次出现的形式和上下文确定其具体的数据类型。当变量类型不确定时,awk默认其为字符串类型。这里有一个技巧:如果你要让你的awk程序知道你所使用的变量的明确类型,你应当在在程序中给它赋初值。

    举例:

    awk '[name=$1;pwd=$2;print $1,$2]'  user.log

    说明:上例中的name、pwd均为自定义变量,不需初始化,非常简便.

  • awk的学习和使用(二)

    angelets 发布于 2009-08-14 21:08:20

    举例, test文本,内容如下,三列分别表示:电话号码、通话时间、费用。

    13911025243      1          3

    13911125274      2          6

    13911025243      3          6

    13810025274      3          6

    13911025243      2          6

    将以上文本中,每个电话号码的总通话时间、总费用进行统计;

    1.先排序:sort test

    2.将第一条记录的三个字段均保存到自定义变量,分别为:phoneNum=$1;time=$2;cost=$3;

    3.此后没读取一条记录时,$1,$2,$3与phonenum,time,cost作比较,如果phoneNum相等,则time=time+$2;cost=cost+$3;如果不相等,就打印phonenum,time,cost,并重置自定义变量值为:phoneNum=$1;time=$2;cost=$3;

    4.最后,需要在end里打印最后一次统计信息;

    实现如下:

    sort test | awk '{if(NR==1){phoneNum=$1;time=$2;cost=$3}else if($1==phoneNum){time+=$2;cost+=$3}else{print (phoneNum,time,cost);phoneNum=$1;time=$2;cost=$3;}}END{print phoneNum,time,cost}'

     

  • awk的学习和使用(三)

    angelets 发布于 2009-08-17 17:50:03

    先看一篇文本,名为testfile,共6个字段:site、engine、url、num1、num2、num3

    "Boharu Sweet Days"     Google  http://www.acpit.com/~rental1/atlinkb/linkdisp.cgi?ID=mari215&KEY1=j01&RT=s1&SORT1=1    8       8  8
    "Aoharu Sweet Days"     Google  http://www.acpit.com/~rental1/atlinkb/linkdisp.cgi?ID=mari215&KEY1=j01&RT=s1&SORT1=1    8       8  8
    "Aoharu Sweet Days"     Google  http://www.acpit.com/~rental1/atlinkb/linkdisp.cgi?ID=mari215&KEY1=j01&RT=s1&SORT1=1    8       8  8
    "Aoharu weet Days"      Bing    http://www.acpit.com/~rental1/atlinkb/linkdisp.cgi?ID=mari215&KEY1=j01&RT=s1&SORT1=1    8       8  0

    A.找出site、engine、url均相同的记录,将这些相同记录的num1,mum2、num3相加;

    B.找到后三个值中为0的记录,将其赋值为NULL;

    解题思路:

    第一步:排序

    第二部:求和

    第三部:判断num为0的记录,做字符串替换

    1.sort即可将其排序。注:sort testfile表示将文件中的每一行进行全排序,先从第一个字段排序,一直到最后一个字段;字段由第一个字母排序,直到最后一个字母;sort的分隔符指定参数为-t,由于本例是由第一个字段往后进行全排序,因此不需要额外指定分隔符;

    2.比较前三个字段的值并求和,用awk。由于awk默认的分隔符为tab或者空格均视为分隔符,因此根据本文的特殊性(第一个字段中包含空格),需要单独指定分隔符为tab,打印第一个字段看看:

    awk -F"\t" '{print $1}' 结果正确。

    3.字符串替换.

    3.1由于需要检查的字符串本身都是一个单独的字段(num1、num2、num3),因此可以使用awk字段判定:

    if($4=="0")$4="NULL";

    3.2另外可以使用awk的内部函数gsub来替换字符串:

    gsub(/0/,"NULL");

    这样子的结果会将每行中所有0都替换为NULL,实际我们只要求将tab后紧跟着的0替换为NULL,linux下tab可以用\<\>表示:

    gsub(/\<0\>/,"NULL"); 表示将tab后面的0替换为NULL(这个解释非常奇怪,但是结果是对的。。有待考察)

    3.3字符串替换功能,一般会使用比较简洁的sed 's/source-charactor/dest-charactor/'。其中的字符匹配支持正则表达式。

    sed 's/\t0/\tNULL'

    4.最后:

        处理问题A的awk文件:testA.awk

    BEGIN{FS="\t"}
    {if(NR==1)
    {
            site=$1;engin=$2;url=$3;n1=$4;n2=$5;n3=$6;
    }
    else if(site==$1&&engin==$2&&url==$3)
    {
            n1+=$4;n2+=$5;n3+=$6;
    }
    else
    {
            print(site"\t"engin"\t"url"\t"n1"\t"n2"\t"n3);
            site=$1;engin=$2;url=$3;n1=$4;n2=$5;n3=$6;}
    }
    END{print(site"\t"engin"\t"url"\t"n1"\t"n2"\t"n3)}

        处理问题B的awk文件:testB.awk

    BEGIN{FS="\t"}
    {
            if($4=="0")$4="NULL";
            if($5=="0")$5="NULL";
            if($6=="0")$6="NULL";
            print($1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6);
    }

    合并:

    sort testfile | awk -f testA.awk | awk -f testB.awk > out

     

  • Linux下的常用命令(不断整理中)

    angelets 发布于 2009-08-18 13:46:28

    1.合并两个文件:cat file1, file2 > file3

    2.清屏clear;客户端乱码时:reset;

    3.查看用户登录日志:who -u /var/log/wtmp  (也可以用last查看)

    4.统计记录行数: wc -l

    5.查找:find 路径 -name 文件/目录名

    6.显示隐藏文件(.开头的文件一般会被隐藏):ls -al 或者直接 ll

    7.查找rpm包安装路径 rpm -qlp xxx.rpm 或者rpm -ql xxx

      查找已安装的rpm包:rpm -qa|grep xxx

      查询一个已经安装的文件属于哪个软件包:rpm -qf 文件名 
      查看一下已安装软件所依赖的软件包及文件:rpm -qR 软件名

      查看未安装rpm包的信息,只要在上面的命令中多加一个参数p,比如:rpm -qpR ***.rpm

    8.在后台运行程序:后面加& 或者前面加 nohup
    9.ll -t 按修改时间倒序 (ll --help 查看)
      ll -rt 按修改时间正序
    10.xargs用法:
      ps -aux|grep "httpd"|grep -v "grep" |awk '{print $1}'|xargs kill 说明:把grep出来的结果,传给xargs执行kill操作;
    11.下载:wget url 举例:wget url -O filename.htm 
    12.cat /proc/version 查看版本信息
      cat /etc/issue 查看版本信息带有update信息
      uname -a 查看所有系统信息
      uname -r 查看kernel release
      uname -v 查看kernel version
      uname -p 查看处理器32位、46位
    13.文件编码转换:iconv -c -f utf-8 -t gbk file 将utf8编码的转成gbk编码
    14. 替换字符串:sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`
    15.tee [-ai][--help][--version][文件...]  读取标准输入的数据,并将其内容输出成文件
    16. ls 2>&1 1>/dev/null 将错误信息输出到标准输出,将标准输出的其他信息输出到黑洞;
    17. rpm 卸载 rpm -e xx --nodeps
    18. 查看磁盘剩余空间: df -hl
    19. sar -r -5 -10 表示监控内存,并且每5秒取一个结果,一共取10个结果,sar是监控所有进程的资源占用情况,如果需要个别进程,可以使用ps aux |grep 方式

    20. top输出重定向有问题,无法重定向到文件
    21. zcat part-r-0000.gz | head -n 100 > a 
        zcat可以在不解压的情况下扩展压缩包并讲内容输出到标准输出

    18. chown -R admin:admin aaa/ 把aaa目录及目录下的所有文件修改为隶属于admin用户,admin租
    19. 查看机器cpu:cat /proc/cpuinfo
    20. 查看机器内存:free -m
    21. top查看cpu、内存占用率时,shift+o可以选择排序方式,默认是按用户名排序的
    23. 有sudo账号的情况下,想使用其他账号执行程序,比如想临时使用admin账号执行程序,可以这样:
         sudo -u admin  **.sh

         想一直使用admin账号,可以用su更好账号:sudo su admin

         退出使用exit


    24. 查看当前系统在线用户情况: w 、 who ,查看自己登录名:whoami
    25. dirname $PWD 查看当前目录的父目录
    26. sort后面不加文件的情况,默认从标准输入传入数据,使用ctrl+d终止终端输入
    27. cat file1 file2 > file3
    28. cd - 返回到上次所在的目录
    29. date -d"yesterday" +%Y%m%d 注意,+和%Y%m%d之间不能有空格
    30. unzip可以解压jar文件,unzip aa.jar -d AA
    31. 一个好用的for in 循环:
        for i in {1..100}
        do
          .......
        done

    32.vim时查看文件的编码:set fileencoding

       vim时转换文件的编码:set fileencoding=utf-8


     

    33. sudo /sbin/ldconfig
    命令解析:ldconfig是一个动态链接库管理命令

    为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig
    ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态 链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表. 

    ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.
     
    34.

    :

    空命令[冒号]. 这个命令意思是空操作(即什么操作也不做). 它一般被认为是和shell的内建命令true是一样的。冒号":" 命令是Bash自身内建的,它的退出状态码是真(即0)。

    1.可以用于注释:

    : '
    code1
    code2
    code3   
    '
    2.表示true

    while :
    do
     operation-1
     operation-2
     ...
      operation-n
     done
     
     等同于:
     while true
      do
          ...
      done

    3.if/then结构中作占位符

    if condition
    then :   # 什么也不做的分支
    else
        take-some-action
    fi

    4.在必须要有两元操作的地方作为一个分隔符

    : ${username=`whoami`}
     # ${username=`whoami`}   如果没有开头的:,将会出错
     #                        除非"username"是一个外部命令或是内建命令...

     

    Shell脚本while read line 损失制表符的问题

    描述:

    采用读取每行的数据,再处理的方式

    while read line

    do

    done<$file

    问题:

    但是出现一个问题:read line后line中的\t不见了,导致我awk处理时找不到\t,这时默认的分隔符是空格,可是数据本身也会有空格,就会混淆

    原因:

    查找后得知read line会过滤掉行首、行尾的空格、制表符等。

    处理办法:

    read -r line

    yum install from list

    需要使用-y参数 
    while read line
    do
    yum -y install $line
    done

     

    df -h 用m、g的数量级显示大小

    du -h --max-depth=1 ./ 显示一级目录大小

    重启crontab:

    /etc/rc.d/init.d/crond   restart

    reloadcrontab

    sudo /etc/init.d/crond reload

    35./var/log/messages 可以查看用户sudo操作等信息

    36.文件分割:split -b 12M filename 按大小分割

    split -l 12000 filename 按行分割

    合并:cat file1 >>file2

    37.使用uniq时,文件编码与终端term编码必须一致,否则uniq无效;

    38.有些应用,在rpm安装后,会自己启动。一般情况下是在/etc/rc.d/init.d/下安装一个脚本,这个脚本时被系统service调用的:如脚本名叫:ppp.sh
    则service调用如下:service ppp.sh start
    会传入参数的

     

    39.如何修改机器名并生效

    修改/etc/hosts
    增加:10.232.128.86  kgbtest128086.sqa.cm4 
    执行hostname kgbtest128086.sqa.cm4

    使用hostname或者uname -n 检查设置的hostname是否生效

    40.curl、wget都可以指定host:

    curl -H "Host:fortest.net" "http://192.9.100.10/index.php"

    41.grep 输出匹配行的前后多行

    grep -B1 -A2 "DMA" message.txt

    42 . sed -i '12,15d' filename

      删除12到15行

    43.curl http://10.222.133.62/test.php -d "asfdasdfq3wfa42342"

    使用curl模拟post方式发送数据

    --data-binary <数据> 可以发送二进制数据 

    --data-urlencode <数据> 可以发送urlencode之后的数据

    crontab的log:

    /var/log/cron*

     

    查看字符的十六进制编码:od

    在vim查看十六进制编码:%!xdd
    返回普通模式:%!xdd -r
    二进制、八进制、十六进制:
    http://longmans1985.blog.163.com/blog/static/70605475201152802851529/

     
    大家在更新环境的时候查找线上地址,一般用grep  '地址'  -r  *  的命令,这样对于压缩的js文件查找的时候就非常麻烦,打出一屏的地址;没法看出在哪个具体文件
    没有效率;
    解决的办法:grep  -no  '地址'  -r  *     
    -n参数是打印grep的地址所在行号  
    -o参数是去掉其他的内容只显示你grep的地址;
    这样去找地址很方便,很有效率
     
     
    怎样查找一个文件夹在哪个目录下

    如果只显示所在目录的路径:
    find 目录 -type d -name "查询目录名" -printf "%h\n"

    如果同时显示目录名称和所在目录的路径:
    find 目录 -type d -name "查询目录名" -printf "%p %h\n"
     
     
     

    我们有时会用到测试机发送邮件的功能,但测试机器曾出现过不能发送邮件的情况,解决办法是把iptables关掉。       执行命令:/etc/init.d/iptables stop

     
    分享几个shell命令另类用法:
    1、快速备份文件
    cp filename{,.back}
    2、清空或创建一个文件
    > 1.php
    3、实时查看某个目录下最新改动过的文件
    watch -d -n 1 'df; ls -FlAt /path'
    4、查看被占用端口的进程
    netstat -tulnp
    5、切换回上一个目录
    cat -
  • awk的学习和使用(四)

    angelets 发布于 2009-08-18 23:09:26

     
    在本系列的(一)中,学习了以下几个部分:
    awk的三种调用方式:命令行式、使用-f选项调用awk文件、将#!/bin/awk -f添加到awk文件首行。
    awk语法
    awk的记录、字段和内部变量
    awk的内置函数
    awk的自定义变量
     
    下面将继续学习后面的部分:awk的运算与判断awk的流程控制awk中的正则表达式awk与shell的混合编程
     
    一、awk的运算与判断
    awk支持多种运算,这些运算与c中的基本相同。
    运算符:+、-、*、/、%、++、--、+=、-=、=+、=-等;
    运算函数:log、sqr、cos、sin、length、substr等;
    条件测试:==、!=、>、<、>=、<=等;
    逻辑运算符:!、&&、||、()等;
     
    二、awk的流程控制
    BEGIN和END
    在awk中两个特别的表达式,BEGIN和END,这两者都可用于pattern中(参考前面的awk语法),提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。

    例:累计销售文件xs中的销售金额(假设销售金额在记录的第三字段):

    $awk
    >'BEGIN { FS=":";print "统计销售金额";total=0}
    >{print $3;total=total+$3;}
    >END {printf "销售金额总计:%.2f",total}' sx
    (注:>是shell提供的第二提示符,如要在shell程序awk语句和awk语言中换行,则需在行尾加反斜杠\)

    在这里,BEGIN预置了内部变量FS(字段分隔符)和自定义变量total,同时在扫描之前显示出输出行头。而END则在扫描完成后打印出总合计。

    流程控制语句
    awk提供了完备的流程控制语句,其用法与C语言类似:
    if...else语句
    while语句
    do-while语句
    for语句
     
    三、awk中的正则表达式
    对于awk而言正则表达式是置于两个正斜杠之间、由字符组成的模式。正则表达式位于awk语法中的pattern。如果输入行中的某个字符串与正则表达式相匹配,则最终条件为真,于是执行与该表达式关联的所有操作如果没有指定操作则打印与正则表达式匹配的记录
    例:显示文本文件mydoc匹配(含有)字符串"sun"的所有行。
    $awk '/sun/{print}' mydoc
    由于显示整个记录(全行)是awk的缺省动作,因此可以省略action项。
    $awk '/sun/' mydoc
    例:下面是一个较为复杂的匹配的示例:
    $awk '/[Ss]un/,/[Mm]oon/ {print}' myfile
    它将显示第一个匹配Sun或sun的行与第一个匹配Moon或moon的行之间的行,并显示到标准输出上。
    如何查找第一个字段匹配正则的行?
    例子:查找第一个字段中带有sun字符串的行,并打印;
    $awk -F"\t" '$1~/sun/{print $1 "\t" $2}' filename 
    awk中逗号分隔的两个pattern,表示对满足第一个pattern,到满足第二个pattern之间的行(包括满足pattern1的行,不包括满足pattern2的行),执行action操作。如我们常用的:
    awk 'NR==2,NR==5 {print $0} myfile'
    表示打印第二行到第四行。

     
    四、awk与shell的混合编程
    1.awk读取Shell script程序变量
    在awk中我们可以通过“'$变量名'”的方式读取sell scrpit程序中的变量。
    例:在下面的示例中,我们将读取sell scrpit程序中的变量Name,该变量存放的是文本myfile的撰写者,awk将打印出这个人名。 
    下面给出两种方式:
    第一种比较常用的方式:(双引号和单引号的意义需要明确)
    #!/bin/sh
    name='John'
    awk '{print $1,$2,"'$name'"}' myfile
    -------------------------------------------------
    第二种方式:
    #!/bin/sh
    name='John'
    awk '{print $1,$2,myname}' myname=$name myfile
    不过这种方式中,awk自定义变量myname不能在BEGIN中使用。
     
    2.将shell命令的执行结果送给awk处理
    作为信息传送的一种方法,我们可以将一条shell命令的结果通过管道线(|)传递给awk处理:
    例:示例awk处理shell命令的执行结果
    $who -u | awk '{printf("%s正在执行%s\n",$2,$1)}'
    该命令将打印出注册终端正在执行的程序名。

    3.shell script程序读awk的执行结果
    shell中可以将awk执行结果赋值给shell变量。我们可以用变量名=`awk语句`的形式将awk执行的结果存放入一个shell script变量。当然也可以用管道线的方法将awk执行结果传递给shell script程序处理。
    下面给出变量名=`awk语句`的方式(注释,awk语句必须使用键盘左上角的反引号引起来。)
    下例为:找出myfile中带有fail字符串的行并统计行数,最后打印出格式为:there are (行数) lines
    #!/bin/sh
    temp=`awk '/fail/{print $0}' myfile |wc -l`
    echo "there are $temp lines" 

    3.还有其他shell、awk混合编程的方式,由于本人对shell不是很熟,请参见原文吧。
  • windows快捷键

    zhangfn2001 发布于 2009-08-17 23:15:58

    虽然很多用户使用Windows都有很长一段时间了,但是很多用户都不知道Windows中存在什么快捷键,包括笔者也是会使用几个比较普遍的快捷键。实际上很多快捷键都是非常有用的,让我们来看看:

      CTRL+A:选中活动窗口的所有内容

      CTRL+C:把选中的东西复制到粘贴板

      CTRL+F:显示“查找和替换”对话框

      CTRL+G:显示定位对话框

      CTRL+N:显示新建对话框

      CTRL+O:显示打开对话框

      CTRL+P:显示打印对话框

      CTRL+S:保存当前文档

      CTRL+V:粘贴

      CTRL+X:剪切

      CTRL+Z:撤销

      CTRL+F4:关闭当前活动窗口

      CTRL+拖放文件:复制拖放的文件

      CTRL+ESC:显示开始菜单

      CTRL+F6:打开活动应用程序的下一个文档窗口

      ALT+ENTER:显示选中对象的属性

      ALT+F4:关闭活动项目或者退出活动的程序

      ALT+空格:打开当前活动窗口的快捷菜单

      ALT+TAB:在打开窗口间切换

      ALT+ESC:以打开的顺序切换窗口

      F1:提供当前窗口或者选中项目的帮助文件

      F2:重命名选中的项目

      F3:搜索文件或文件夹

      F4:显示我的电脑或Windows Explorer中的地址栏

      F5:刷新活动窗口

      F6:在当前窗口中的元素间切换,与TAB键功能一样

      F10:激活当前窗口的菜单栏

      Win:显示或隐藏开始菜单

      Win+BREAK:显示系统属性对话框

      Win+D:显示桌面

      Win+M:最小化所有窗口

      Win+SHIFT+M:恢复最小化窗口

      Win+E:打开我的电脑

      Win+F:搜索文件或文件夹

      CTRL+Win+F:搜索计算机

      Win+F1:显示Windows帮助文件

      Win+L:锁住键盘

      Win+R:打开运行窗口

      Win+U:打开辅助工具管理器

      TAB:在选项间切换

      SHIFT+TAB:在选项间切换,顺序与TAB相反

      CTRL+TAB:在标签间进行切换

      CTRL+SHIFT+TAB:在标签间反向切换

      ALT+带下划线的字母:运行相应的命令或选择相应的选项

      空格键:如果焦点选中复选框,选择或反选复选框

      以下的快捷键用于与Windows资源管理器类型的程序:

      NUM LOCK+星号(*):显示选中文件夹的所有子文件夹

      NUM LOCK+加号(+):显示选中文件夹的内容

      NUM LOCK+减号(—):折叠选中文件夹
  • sql

    zhaoyabin123456 发布于 2008-08-19 11:13:40

    1、用户

    查看当前用户的缺省表空间
    SQL>select username,default_tablespace from user_users;

    查看当前用户的角色
    SQL>select * from user_role_privs;

    查看当前用户的系统权限和表级权限
    SQL>select * from user_sys_privs;
    SQL>select * from user_tab_privs;

    显示当前会话所具有的权限
    SQL>select * from session_privs;

    显示指定用户所具有的系统权限
    SQL>select * from dba_sys_privs where grantee='GAME';

    显示特权用户
    select * from v$pwfile_users;

    显示用户信息(所属表空间)
    select default_tablespace,temporary_tablespace
    from dba_users where username='GAME';

    显示用户的PROFILE
    select profile from dba_users where username='GAME';


    2、表

    查看用户下所有的表
    SQL>select * from user_tables;

    查看名称包含log字符的表
    SQL>select object_name,object_id from user_objects
    where instr(object_name,'LOG')>0;

    查看某表的创建时间
    SQL>select object_name,created from user_objects where object_name=upper('&table_name');

    查看某表的大小
    SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
    where segment_name=upper('&table_name');

    查看放在ORACLE的内存区里的表
    SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;

    3、索引

    查看索引个数和类别
    SQL>select index_name,index_type,table_name from user_indexes order by table_name;

    查看索引被索引的字段
    SQL>select * from user_ind_columns where index_name=upper('&index_name');

    查看索引的大小
    SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
    where segment_name=upper('&index_name');

    4、序列号

    查看序列号,last_number是当前值
    SQL>select * from user_sequences;

    5、视图

    查看视图的名称
    SQL>select view_name from user_views;

    查看创建视图的select语句
    SQL>set view_name,text_length from user_views;
    SQL>set long 2000; 说明:可以根据视图的text_length值设定set long 的大小
    SQL>select text from user_views where view_name=upper('&view_name');

    6、同义词

    查看同义词的名称
    SQL>select * from user_synonyms;

    7、约束条件

    查看某表的约束条件
    SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
    from user_constraints where table_name = upper('&table_name');

    SQL>select c.constraint_name,c.constraint_type,cc.column_name
    from user_constraints c,user_cons_columns cc
    where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
    and c.owner = cc.owner and c.constraint_name = cc.constraint_name
    order by cc.position;

    8、存储函数和过程

    查看函数和过程的状态
    SQL>select object_name,status from user_objects where object_type='FUNCTION';
    SQL>select object_name,status from user_objects where object_type='PROCEDURE';

    查看函数和过程的源代码
    SQL>select text from all_source where ōwner=user and name=upper('&plsql_name');

Open Toolbar