ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>国产丝袜一区,亚洲草久电影,亚洲精品电影在线观看http://www.aygfsteel.com/lingy/category/39871.htmlzh-cnTue, 31 Jan 2012 14:06:07 GMTTue, 31 Jan 2012 14:06:07 GMT60[端口被占ç”?环境起不来]常见‹¹‹è¯•环境问题解决http://www.aygfsteel.com/lingy/archive/2012/01/31/369065.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Tue, 31 Jan 2012 03:29:00 GMThttp://www.aygfsteel.com/lingy/archive/2012/01/31/369065.html大家是否遇到部çÖv环境的时å€?端口被占ç”?环境起不来的问题呢?遇到˜q™ä¸ªæƒ…况,我们该如何解军_‘¢åQ?/span>

下面我把我遇到这个问题解决的æ–ÒŽ³•æ€È»“下:

现象是这æ ïLš„:

1. ™åµé¢è®‰K—®å‡ºçް: Http 500

2. 后台启动日志提示: 

vodka init successfully!!! ...

start apache ......

(98)Address already in use: make_sock: could not bind to address [::]:5071

no listening sockets available, shutting down

Unable to open logs

解决æ–ÒŽ³•: 杀掉占用的˜q›ç¨‹

首先,需要用root账号登陆,登陆�输入: netstat -plan |grep 5070

出现如下:


[Intranet root@qa-kernal-143-41 /root]

#netstat -plan |grep 5070

tcp 0 0 :::5070 :::* LISTEN 28002/httpd 

tcp 1 0 ::ffff:10.20.143.41:5070 ::ffff:10.16.46.75:4654 CLOSE_WAIT 28406/httpd 

最后杀掉占用的˜q›ç¨‹,输入:   lsof -i:5070 卛_¯ (æ³?070是端口号)

[Intranet root@qa-kernal-143-41 /root]

#lsof -i:5070

]]>
linux用户¾l„相关知è¯?/title><link>http://www.aygfsteel.com/lingy/archive/2012/01/31/369064.html</link><dc:creator>æž—å…‰ç‚?/dc:creator><author>æž—å…‰ç‚?/author><pubDate>Tue, 31 Jan 2012 03:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/lingy/archive/2012/01/31/369064.html</guid><description><![CDATA[<span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">用root用户登陆输入命ä×ocd /homeåQŒå†ç”¨ll查看发现drwxr-xr-x 12 622   622    4096 Apr 18 19:21 aurora  aurora用户属主不正¼‹?/span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">用命令chown aurora.aurora aurora修改用户属主</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">知识点:</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1.查看用户¾l„ä¿¡æ?cat /etc/passwd</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">/etc/passwdä¸­ä¸€è¡Œè®°å½•å¯¹åº”ç€ä¸€ä¸ªç”¨æˆøP¼Œæ¯è¡Œç”¨å†’å·éš”å¼€åˆ†äØ“7个字ŒDµï¼Œå…·ä½“字段说明如下åQ?/span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(255,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">name:password:uid:gid:comment:home:shell<br style="outline-style: none" />用户å?口ä×o:用户标识å?¾l„标识号:注释性描˜q?ä¸È›®å½?ç™Õd½•Shell</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">home: 指定用户的主目录的绝对èµ\å¾?/span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">shell: 用户登陆后启动的一个进½E‹ï¼Œ˜q™ä¸ª˜q›ç¨‹æ˜¯ç”¨æˆïL™»å½•到¾pȝ»ŸåŽè¿è¡Œçš„命ä×o解释器或某个特定的程序,即Shellã€?/span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">例子åQ?/span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">aurora:x:707:707::/home/aurora:/bin/bash</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   ¾pȝ»Ÿé¦–先会查é˜?/etc/passwd æ–‡äšgåQŒçœ‹æ˜¯å¦æœ‰aurora ˜q™ä¸ªè´¦å·åQŒç„¶åŽç¡®å®šauroraçš„UIDåQŒé€šè¿‡UID 来确认用户和íw«ä†¾åQ?/span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   如果存在则读å?etc/shadow 影子文äšg中所对应的aurora的密码;  <span id="wmqeeuq" class="Apple-converted-space"> </span></span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">   用户名:xåQšuidåQšgidåQšç”¨æˆ·åå…¨ç§°åQšç”¨æˆïLš„å®Óž¼šç”¨æˆ·æ‰€ç”¨çš„shell¾cÕdž‹</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">  x指向映射</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">uidä¸? åˆ™äØ“root  </span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2.aurora:$1$nC4FzXJz$OP5LS0Evj4uMsLvMHP1eZ/:15082:0:99999:7:::</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">etc/shadowæ–‡äšgæ˜?etc/passwd 的媄子文ä»Óž¼Œ˜q™ä¸ªæ–‡äšgòq¶ä¸ç”?etc/passwd 而äñ”生的åQŒè¿™ä¸¤ä¸ªæ–‡äšg是应该是对应互补的;</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">shadow内容包括用户及被加密的密码及其他/etc/passwd 不能包括的信息ã€?/span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">用户åQšå¯†ç ï¼šä¸Šæ¬¡ä¿®æ”¹å¯†ç çš„æ—¶é—?åQšä¸¤‹Æ¡ä¿®æ”¹å£ä»¤é—´éš”æœ€ž®‘的天数åQšä¸¤‹Æ¡ä¿®æ”¹å£ä»¤é—´éš”æœ€å¤šçš„天数</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3.aurora:x:707:</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">用户名:用户¾l„密码:GID :用户列表</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">½W¬å››å­—段åQšç”¨æˆ·åˆ—表,每个用户之间ç”?号分å‰ÔŒ¼›æœ¬å­—ŒDµèƒ½ä¸ºç©ºåQ?/span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">如果字段为空表示用户¾l„䨓GID的用户名</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">4.chown 修改文äšg和文件夹的用户和用户¾l„属æ€?/span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; outline-style: none; font: 14px/24px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Arial; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">5.passwd aurora 修改密码</span><img src ="http://www.aygfsteel.com/lingy/aggbug/369064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lingy/" target="_blank">æž—å…‰ç‚?/a> 2012-01-31 11:28 <a href="http://www.aygfsteel.com/lingy/archive/2012/01/31/369064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 命ä×ohttp://www.aygfsteel.com/lingy/archive/2010/08/17/329113.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Tue, 17 Aug 2010 08:28:00 GMThttp://www.aygfsteel.com/lingy/archive/2010/08/17/329113.html 

insert into ali_zeus_access_area
select * from ali_zeus_access_area@zeus_dev;

script -q tty.log

sqlplus /nolog
conn rnd/mCQe88il@crmintsb
conn rnd/mCQe88il@crmint


scp tty.log guangyan.lingy@10.20.130.14:/home/guangyan.lingy/tty0601.log

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
sqlplus rnd/mCQe88il@crmg

for remote in \
172.16.131.47 172.16.131.48 172.16.131.49 172.16.131.50 172.16.131.51 172.16.131.52 172.16.131.53 172.16.131.54 172.16.131.55 172.16.131.2 172.16.131.3 172.16.131.4 172.16.131.5 172.16.131.6 172.16.131.7 172.16.131.41 172.16.131.42 172.16.131.56 172.16.131.57 172.16.131.58 \
;do echo $remote; ssh $remote "grep 'sms webService visitor IP is' output/logs/user/martini_sales_tool.log"; done

 

daisy.louy
 louying
 
 
carvin hello123
http://svn.alibaba-inc.com/repos/crm/martini/branches/20091209_dcs_guangyan.lingy_dev

weiming.shi
jinbo.yu
1234567890 alibaba-guest
我刚又试�/p>


中国的十大宜居小�中午的时候看�br /> http://focus.news.163.com/10/0531/09/680LGN5L00011SM9.html
有泉�)

数据模型资源手册

需要低烟无卤阻燃电¾~†æ–™çš„电¾~†ä¼ä¸?/p>

]]>
vim 到指定行 :3305http://www.aygfsteel.com/lingy/archive/2009/09/02/293577.html林光�/dc:creator>林光�/author>Wed, 02 Sep 2009 04:28:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/09/02/293577.html :number
eg:
:3305

]]>
Vim查找操作http://www.aygfsteel.com/lingy/archive/2009/09/02/293576.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Wed, 02 Sep 2009 04:25:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/09/02/293576.html 

" 搜烦
/joe/e : 讄¡½®å…‰æ ‡åˆ°åŒ¹é…?joe"的末ž®?br /> /joe/e+1 : 讄¡½®å…‰æ ‡åˆ°åŒ¹é…?joe"的末ž®‘Ö†åŽç§»ä¸€ä½?br /> /joe/s-2 : 讄¡½®å…‰æ ‡åˆ°åŒ¹é…?joe“的开头再前移两位
/^joe.*fred.*bill/ : 匚w…ä»?j'开头且"joe"åˆ?fred"åˆ?bill"之间臛_°‘有一个字½W?br /> /^[A-J]\+/ : 搜烦'A'åˆ?#8217;J‘重复两次以上的开头行
/begin\_.*end : 多行匚w…
/fred\_s*joe/i : 可以是ä“Q何空白字½W¦åŒ…括\n,\t½{‰ç­‰
/fred\|joe : 搜烦fred或者joe
/.*fred\&.*joe : 搜烦同时包括fred跟joe的行
/\<fred\>/i : 搜烦独立的单词fred
/\<\d\d\d\d\> : 搜烦独立çš?位数å­?br /> /\D\d\d\d\d\D : 搜烦6位字½W¦ä¸²ä¸­é—´4ä½æ•°å­—å‰åŽä¸¤ä½ä¸èƒ½äØ“æ•°å­—
/\<\d\{4}\> : �\<\d\d\d\d\>
" 查找½Iø™¡Œ
/^\n\{3} : 匚w…ä¸‰è¿ž¾l­çš„½Iø™¡Œ
" 使用正则表达式组查找
/\(fred\).*\(joe\).*\2.*\1
" 正则表达式重�br /> /^\([^,]*,\)\{8}
" visual searching
:vmap // y/<C-R>"<CR> : visually模式下的键盘映射åQŒæŠŠ//映射成匹配当前选中的文æœ?br /> :vmap <silent> // y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> : 包括½Iºç™½å­—符
" \zs å’?\ze 匚w…åŽ?:h /\zs
/<\zs[^>]*\ze> : 匚w…ž®–括号中的内å®?br /> " 零宽度匹é…?:h /\@=
/<\@<=[^>]*>\@= : search for tag contents, ignoring chevrons
/<\@<=\_[^>]*>\@= : search for tags across possible multiple lines
" 多行查找 \_ 的意思是包括换行½W?br /> /<!--\_p\{-}--> : 匚w…<!--开始到-->¾l“尾的所有内å®?br /> /fred\_s*joe/i : 匚w…fred开始到joeåQŒä¹‹é—´ä¸€å®šå¾—是空白字½W?br /> /bugs\(\_.\)*bunny : 匚w…æ‰€æœ‰bugs到bunny的字½W¦ä¸²
:h \_ : help
" 查找函数声明åQŒnmap为normal模式下的键盘映射
:nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>
" 查找多个文äšg
:bufdo /searchstr/ : 在多个文件缓冲区里执行查æ‰?br /> " 更好的多文äšg查找定位æ–ÒŽ³•
:bufdo %s/searchstr/&/gic : 在多个文件缓冲区里查找,按下n停止
" 怎样不ä‹Éç”?/ 来查扄¡½‘址
?
http://www.vim.org/ : 向后查找
" 查找指定字符以外的字½W¦ä¸²
/\c\v([^aeiou]&\a){4} : 查找4个辅韛_­—æ¯?br /> ----------------------------------------
#替换
:%s/fred/joe/igc : 普通替换命�br /> :%s/\r//g : 删除 DOS 的换行符 ^M
" 你的文本文äšg是否ä¹×ƒ¸ƒå…«ç³Ÿçš„æŽ’成一行?使用如下命ä×o
:%s/\r/\r/g : 转换 DOS 回èžR½W?^M 为真正的回èžR½W?br /> :%s= *$== : 删除行尾½Iºç™½
:%s= \+$== : 同上
:%s#\s*\r\?$## : 删除ž®ùNƒ¨½Iºç™½å’Œdos换行½W?br /> :%s#\s*\r*$## : 同上
" 删除½Iø™¡Œ
:%s/^\n\{3}// : 删除˜qžç®‹3个空è¡?br /> :%s/^\n\+/\r/ : 压羃½Iø™¡ŒåQŒå¤šä¸ªæ›¿æ¢äؓ一ä¸?br /> %s#<[^>]\+>##g : 删除htmlçš„tag部分
" IF YOU ONLY WANT TO KNOW ONE THING
:'a,'bg/fred/s/dick/joe/igc : 非常有用
# 译释åQ?'a,''b指定一个范å›ß_¼šmark a ~ mark b
# g//用一个正则表辑ּæŒ‡å‡ºäº†è¿›è¡Œæ“ä½œçš„行必™åÕd¯ä»¥è¢«fred匚w…
# 看后面,g//是一个全局昄¡¤ºå‘½ä×o
# s/dick/joe/igc则对于这些满­‘Ïx¡ä»¶çš„行进行替æ?br /> " 复制åˆ?br /> :%s= [^ ]\+$=&&= : 复制最后一åˆ?br /> :%s= \f\+$=&&= : 一æ ?br /> :%s= \S\+$=&& : 晕,˜q˜ä¸€æ øP¼
" 记忆åQˆåå‘引用)
:s/\(.*\):\(.*\)/\2 : \1/ : ž®†ä¸¤ä¸ªå­—ŒDµé¢ å€?br /> :%s/^\(.*\)\n\1$/\1/ : 删除重复è¡?br /> " 非贪婪匹é…?\{-}
:%s/^.\{-}pdf/new.pdf/ : 删除½W¬ä¸€ä¸ªpdf
" use of optional atom \?
:%s#\<[zy]\?tbl_[a-z_]\+\>#\L&#gc : lowercase with optional leading characters
" 跨越ž®½é‡å¤šçš„è¡?br /> :%s/<!--\_.\{-}-->// : 删除多行注释
:help /\{-} : 查看非贪婪匹配的更多帮助
" 使用寄存器替æ?br /> :s/fred/<c-r>a/g : ž®†fred替换为寄存器a里的内容
:s/fred/<c-r>asome_text<c-r>s/g
:s/fred/\=@a/g : better alternative as register not displayed
" 在一行里写多¿Uå‘½ä»?br /> :%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/
:%s/a/but/gie|:update|:next : 当ä‹Éç”?@: 来重å¤?br /> " 或运½Ž?br /> :%s/suck\|buck/loopy/gc : 替换suck或者buckåQˆè¿™é‡Œ|不是½Ž¡é“åQ?br /> " 调用vim函数
:s/__date__/\=strftime("%c")/ : ž®†__date__替换成当前日期,使用strftime函数
" 处理列,替换所有在½W¬ä¸‰åˆ—中的str1
:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
" 交换½W¬ä¸€åˆ—è·Ÿ½W¬å››åˆ?br /> :%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
" ˜q‡æ×oform中的内容攑֜¨å¯„存器里
:redir @*|sil exec 'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redir END
:nmap ,z :redir @*<Bar>sil exec 'g@<\(input\<Bar>select\<Bar>textarea\<Bar>
/\=form\)\>@p'<Bar>redir END<CR>
" 两位以上的数字减三(带进位。这个命令挺有趣åQ?br /> :%s/\d\+/\=(submatch(0)-3)/
" 包含loc或者functions的行中的数字�
:g/loc\|function/s/\d/\=submatch(0)+6/
" 比上面更好的æ–ÒŽ³•
:%s#txtdev\zs\d#\=submatch(0)+1#g
:h /\zs 查看帮助
" 前缀为gg的数字加6
:%s/\(gg\)\@<=\d\+/\=submatch(0)+6/
:h zero-width 查看帮助
" 替换一个特定字½W¦ä¸²ä¸ºæ•°å­?br /> :let i=10 | 'a,'bg/Abc/s/yy/\=i/ |let i=i+1 # ž®†yy转换æˆ?0åQ?1åQ?2½{‰ç­‰
" 比上面的更精¼‹?br /> :let i=10 | 'a,'bg/Abc/s/xx\zsyy\ze/\=i/ |let i=i+1 # ž®†xxyy 转换æˆ?xx11,xx12,
xx13
" find replacement text, put in memory, then use \zs to simplify substitute
:%s/"\([^.]\+\).*\zsxx/\1/
" Pull word under cursor into LHS of a substitute
:nmap <leader>z :%s#\<<c-r>=expand("<cword>")<cr>\>#
" Pull Visually Highlighted text into LHS of a substitute
:vmap <leader>z :<C-U>%s/\<<c-r>*\>/
----------------------------------------
" all following performing similar task, substitute within substitution
" Multiple single character substitution in a portion of line only
:%s,\(all/.*\)\@<=/,_,g : replace all / with _ AFTER "all/"
" Same thing
:s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')#
" Substitute by splitting line, then re-joining
:s#all/#&^M#|s#/#_#g|-j!
" Substitute inside substitute
:%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/
----------------------------------------
" 全局昄¡¤ºå‘½ä×o
:g/gladiolli/# : 查找òq¶æ˜¾½CºåŒ¹é…çš„行号
:g/fred.*joe.*dick/ : 昄¡¤ºæ‰€æœ‰å«æœ?fred,joe & dick的行
:g/\<fred\>/ : 昄¡¤ºå•一单词fred
:g/^\s*$/d : 删除所有空�br /> :g!/^dd/d : 删除不含字符�'dd''的行
:v/^dd/d : 同上
:g/fred/,/joe/d : 删除所有的从fred到joe
:g/-------/.-10,.d : �------为标记删除之前的10�br /> :g/{/ ,/}/- s/\n\+/\r/g : 删除 {...}之间的空�br /> :v/\S/d : Delete empty lines (both types)
:v/./,/./-j : 压羃½Iø™¡Œ
:g/^$/,/./-j : 同上
:g/<input\|<form/p : 或运½Ž?br /> :g/^/put_ : 双倍行å®?(pu = put)
:g/^/m0 : 颠倒文�(m = move)
:'a,'bg/^/m'b : 颠倒选中�a �b
:g/^/t. : 重复è¡?br /> :g/fred/t$ : 拯‚´è¡Œä»Žfred到结ž®?br /> :g/stage/t'a : 拯‚´è¡Œä»Žstage åˆ?marker aåQˆa为标记的位置åQ?br /> :g/\(^I[^^I]*\)\{80}/d : 删除最ž®‘包å?0个tab的行
" perform a substitute on every other line
:g/^/ if line('.')%2|s/^/zz /
" match all lines containing "somestr" between markers a & b
" copy after line containing "otherstr"
:'a,'bg/somestr/co/otherstr/ : co(py) or mo(ve)
" as above but also do a substitution
:'a,'bg/str1/s/str1/&&&/|mo/str2/
:%norm jdd : 隔行删除
" 增加数字 (键入 <c-a>)
:.,$g/^\d/exe "norm! \<c-a>": 增加从当前行首到¾l“尾的数å­?br /> :'a,'bg/\d\+/norm! ^A : 增加数字
" 保存全局命ä×o的结æž?(注意必须使用æ·ÕdŠ æ¨¡å¼) 你需要ä‹Éç”?qaq 清空寄存器a.
"save results to a register/paste buffer 存储¾l“æžœåˆ?寄存å™?¾_˜è„“ åˆ?a
:g/fred/y A : æ·ÕdŠ é…å¤‡è¡Œåˆ°å¯„å­˜å™¨åˆ° a
:g/fred/y A | :let @*=@a : 攑օ¥å¤åˆ¶¾~“冲åŒ?br /> :let @a=''|g/Barratt/y A |:let @*=@a
:'a,'b g/^Error/ . w >> errors.txt
" 复制每一行,然后在复制出来的每一行两侧加上一�print '复制出来的内�
:g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
" 用文件中的内å®ÒŽ›¿æ¢å­—½W¦ä¸²åQ?d 表示删除“标记”
:g/^MARK$/r tmp.ex | -d
" display prettily
:g/<pattern>/z#.5 : display with context
:g/<pattern>/z#.5|echo "==========" : display beautifully
" Combining g// with normal mode commands
:g/|/norm 2f|r* : replace 2nd | with a star
"send output of previous global command to a new window
:nmap <F3> :redir @a<CR>:g//<CR>:redir END<CR>:new<CR>:put! a<CR><CR>
----------------------------------------
" 全局命ä×o和替换命令联å§?(强大的编辑能åŠ?
:'a,'bg/fred/s/joe/susan/gic : 可以使用反向引用来匹�br /> :g/fred/,/joe/s/fred/joe/gic : non-line based (ultra)
----------------------------------------
" 先找fredåQŒç„¶åŽæ‰¾joe
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
----------------------------------------
" create a new file for each line of file eg 1.txt,2.txt,3,txt etc
:g/^/exe ".w ".line(".").".txt"
----------------------------------------
" Absolutely essential
----------------------------------------
* # g* g# : 查找当前光标下的单词åQˆå•个单词) (<cword>) (向前/向后)
% : 匚w…æ‹¬å· {}[]()
. : 重复上次操作
@: : 重复上次的命ä»?br /> matchit.vim : é€?能匹é…?<script> <?php½{‰æ ‡è®?br /> <C-N><C-P> : 插入模式下自动完成填è¯?br /> <C-X><C-L> : 行自动完成(­‘…çñ”有用åQ?br /> /<C-R><C-W> : 把单ä¸?lt;cword>单词攑օ¥æœçƒ¦æˆ–者命令行
/<C-R><C-A> : 把字½W¦ä¸²ä¸­æœ‰çš„单è¯?lt;CWORD>攑օ¥æœçƒ¦æˆ–者命令行
:set ignorecase : 忽略大小å†?br /> :syntax on : 打开语法高亮 Perl,HTML,PHP ½{‰ç­‰
:h regexp<C-D> : 按ctrl+d得到包含regexp的列�br /> (按tab自动不齐)
----------------------------------------
" ½Ž€å•编辑更æ–?_vimrcæ–‡äšg
:nmap ,s :source $VIM/_vimrc :普通模式下的键盘映ž®?,s映射成加载用æˆïL›®å½•下çš?br /> _vimrcæ–‡äšg
:nmap ,v :e $VIM/_vimrc :,v映射成打开_vimrcæ–‡äšg
----------------------------------------
#VISUAL 模式 (方便增加 HTML 标签)
:vmap sb "zdi<C-R>z<ESC> : �VISUALLY模式下将选中的文本前后分别加�br /> :vmap st "zdi<?= <C-R>z ?><ESC> : 加上 <?= ?>
----------------------------------------
" ‹¹è§ˆ
:Exp(lore) : ‹¹è§ˆæ–‡äšg
:Sex(plore) : 分割½H—口‹¹è§ˆæ–‡äšg
:ls : 昄¡¤º¾~“冲åŒ?br /> :cd .. : 讄¡½®å½“前目录位置
:args : 查看当前打开的所有文ä»?br /> :lcd %:p:h : 改变路径到当前编辑的文äšg
:autocmd BufEnter * lcd %:p:h : 攑օ¥.vimrc自动完成上面的命ä»?br /> ----------------------------------------
" ¾~“冲区浏è§?一直排名前10çš„vim脚本)
" 需�bufexplorer.vim
http://www.vim.org/script.php?script_id=42
\be : ¾~“冲‹¹è§ˆå™¨ä¸­æŸ¥çœ‹¾~“冲列表
\bs : 同上åQŒä½†æ˜¯åˆ†å‰²çª—å?br /> ----------------------------------------
" 转换大小å†?br /> guu : ž®†æ­£è¡Œçš„字母转换成小å†?br /> gUU : ž®†æ­£è¡Œçš„字母转换成大å†?br /> Vu : 转换选中的行åQˆå°å†™ï¼‰
VU : 转换选中的行åQˆå¤§å†™ï¼‰
g~~ : 反向转换
vEU : 转换词大å†?br /> vE~ : 反向转换è¯?br /> ggguG : ž®†å½“前编辑文件内容全部è{换成ž®å†™
" Visually 模式下选择所有的字母及数å­?(攑օ¥ .vimrcæ–‡äšgä¸?
vmap ,c :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g<CR>
" 大写所有句子的½W¬ä¸€ä¸ªå­—æ¯?br /> :%s/[.!?]\_s\+\a/\U&\E/g
----------------------------------------
gf : 打开当前光标下或后的文äšg
:nnoremap gF :view <cfile><cr> : 打开当前光标下或后的文äšg, 如果不存在则创徏
ga : 昄¡¤ºå½“前光标下单个字的ascii,十进åˆÓž¼Œåå…­˜q›åˆ¶……
ggVGg? : ž®†æ•´ä¸ªæ–‡ä»¶ç”¨rot13¾~–码……åQˆè°çœ‹å¾—懂啊~~hoho)
ggg?G : 同上 (针对大文�
:8 | normal VGg? : ž®†ç¬¬å…«è¡Œç”¨rot13¾~–码
:normal 10GVGg? : 同上
<C-A>,<C-X> : 增加åQŒå‡ž®‘当前光标下的数å­?br /> win32 用户需要重定义 CNTRL-A
<C-R>=5*5 : 插入25 (ž®åž‹è®¡ç®—å™?
----------------------------------------
" 几个彩蛋……
:h 42 : also
http://www.google.com/search?q=42
:h holy-grail
:h!
----------------------------------------
" 标记 & ¿UÕdЍ
'. : è·›_›žæœ€åŽç¼–辑的è¡?(­‘…有ç”?
`. : 同上åQŒä½†æ˜¯å®šä½ç¼–辑点
g; : è·Œ™{到比较旧的编辑位¾|®ï¼ˆå¦‚果有的话) (vim6.3后的新功èƒ?
g, : ˜q™ä¸ªæ˜¯è¾ƒå¿ƒçš„位置 (同上)
:changes :打出改变è¡?br /> :h changelist : 查看“改变表蟩è½?#8221;的帮åŠ?br /> <C-O> : 依次沿着你的跌™{记录向回è·?(从最˜q‘的一‹Æ¡å¼€å§?
<C-I> : 依次沿着你的跌™{记录向前è·?br /> :ju(mps) : 列出跌™{轨迹
:help jump-motions
:history : 列出历史记录
:his c : 命ä×o行历å?br /> :his s : 搜烦历史
q/ : 搜烦命ä×o历史的窗å?br /> q: : 命ä×o行命令历史的½H—口
:<C-F> : 历史½H—口
----------------------------------------
" ¾~©å†™ & 映射
:map <f7> :'a,'bw! c:/aaa/x
:map <f8> :r c:/aaa/x
:map <f11> :.w! c:/aaa/xr<CR>
:map <f12> :r c:/aaa/xr<CR>
:ab php : 查看以php开头的¾~©å†™
:map , : 列出所有的映射åQˆä»¥é€—号开始的åQ?br /> " 允许映射 F10 (win32)
set wak=no : :h winaltkeys
" 映射中常使用的表½C?br /> <CR> : 回èžR
<ESC> : Esc
<LEADER> : åÏx–œæ?br /> <BAR> : ½Ž¡é“½W¦å·
<BACKSPACE> : 退格键
<SILENT> : 不回æ˜?br /> #昄¡¤ºè‡ªå®šä¹‰çš„ RGB 颜色昄¡¤ºå½“前光标下的字符ä¸?例如 #445588
:nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>
map <f2> /price only\\|versus/ :in a map need to backslash the \
----------------------------------------
" Simple PHP debugging display all variables yanked into register a
" ½Ž€å•çš„ PHP 调试ž®†æ‰€æœ‰æ˜¾½Cºçš„变量攑օ¥å¯„存器a
iab phpdb exit("<hr>Debug <C-R>a ");
----------------------------------------
" 使用寄存器来映射 (攑օ¥ .vimrcæ–‡äšg自动加蝲)
:let @m=":'a,'bs/"
:let @s=":%!sort -u"
----------------------------------------
" 列出寄存å™?br /> :reg : 昄¡¤ºå½“前所有的寄存å™?br /> :reg a : 昄¡¤ºå¯„存器a中的内容
"1p.... : 引用一个叫1的寄存器
:let @y='yy@"' : pre-loading registers (put in .vimrc)
qqq : 清空寄存�"q"
----------------------------------------
" 一些有用的决窍
"ayy@a : æŠŠå½“å‰è¡Œä½œäØ“å‘½ä×o执行
yy@" : 上面的匿名寄存器
u@. : 只执行键入的命ä×o
----------------------------------------
" 从其它命令处获得输入åQˆéœ€è¦å¤–部命令)
:r!ls.exe : 从ls 获得输入插入到当前位¾|?br /> !!date : 从date获得输入åQˆåˆ é™¤å½“前行åQ?br /> " 使用外部sort排序
:%!sort -u : 用sort排序整个文äšgåQˆç»“果覆盖整个文ä»Óž¼‰
:'a,'b!sort -u : 从mark a到mark b之间的内容进行排�br /> !1} sort -u : 排序一个段�br /> :g/^$/;,/^$/-1!sort : Sort each block (note the crucial ;)
----------------------------------------
" 多文件管�(基本�
:bn : è·Œ™{åˆîC¸‹ä¸€ä¸ªbuffer
:bp : è·Œ™{到前一个buffer
:wn : 保存当前bufferòq¶èŸ©è½¬åˆ°ä¸‹ä¸€ä¸ªbuffer (­‘…有ç”?
:wp : 保存当前bufferòq¶èŸ©è½¬åˆ°å‰ä¸€ä¸ªbuffer
:bd : 把当前文件从buffer¿UÕd‡º (­‘…有ç”?
:bun : 卸蝲当前buffer (关闭˜q™ä¸ª½H—口但是不移å‡?
:badd file.c : æ·ÕdŠ file.c到buffer列表
:b 3 : 前往½W¬ä¸‰ä¸?buffer
:b main : 前往含有main的buffer�比如�main.c
:sav php.html : 把当前文件存为php.htmlòq¶æ‰“å¼€
:sav! %<.bak : 换一个后¾~€åä¿å­?(æ—§æ–¹æ³?
:sav! %:r.cfm : 同上
:sav %:s/fred/joe/ : 替换文äšgå?br /> :sav %:s/fred/joe/:r.bak2 : 替换文äšg和后¾~€
:!mv % %:r.bak : 重命名当前文ä»?br /> :e! : 打开未修改之前的文äšg
:w c:/aaa/% : 存储文äšg到指定位¾|?br /> :e # : ¾~–辑标记ä¸?的文件在bufferä¸?br /> :rew : ˜q”回到第一个可¾~–辑的文ä»?br /> :brew : 回到½W¬ä¸€ä¸ªbuffer
:sp fred.txt : 分割½H—口打开fred.txt
:sball,:sb : 把所有的 buffers分割昄¡¤ºåœ¨ä¸€ä¸ªçª—口中 (­‘…有ç”?
:scrollbind : in each split window
:map <F5> :ls<CR>:e # : 按F5昄¡¤ºæ‰€æœ‰buffer, òq¶æ˜¾½Cø™¡Œå?br /> :set hidden : 允许不保存当前buffer而进行切æ?br /> ----------------------------------------
" 在分割窗口中快速切�br /> map <C-J> <C-W>j<C-W>_
map <C-K> <C-W>k<C-W>_
----------------------------------------
" 录制命ä×o (最好的技å·?
qq # 录制命ä×o攑օ¥ q寄存å™?br /> 输入一些命ä»?br /> q # 录制¾l“束
@q :执行攑օ¥å¯„存器q中的内容
@@ åQšé‡å¤?br /> 5@@ åQšé‡å¤?‹Æ?br /> " ¾~–辑一ä¸?寄存å™?录制
"qp :昄¡¤ºå¯„存器q中的内容(普通模式下)
<ctrl-R>q :昄¡¤ºå¯„存器q中的内容 (插入模式ä¸?
" 你现在可以看到记录内容,随便¾~–辑
"qdd :删除åQŒé‡æ–°å­˜å…¥q
@q :执行 录制/寄存�q
" 在可视块中运行记�br /> 1) 定义记录/寄存�br /> qq:s/ to/ from/g^Mq
2) 定义可视�br /> V}
3) 键入 : ž®†æ˜¾½CÞZ¸‹é¢ä¿¡æ?br /> :'<,'>
4)完成如下操作
:'<,'>norm @q
----------------------------------------
"combining a recording with a map (to end up in command mode)
nnoremap ] @q:w!<bar>bd
----------------------------------------
" 可视化模式提供一¿Uçµ‹zÀL˜“用的æ–ÒŽ³•选择一块文本供操作½W¦ä‹Éç”?br /> " 记出
v : ˜q›å…¥å¯è§†åŒ–模å¼?br /> V : ˜q›å…¥å¯è§†åŒ–行选择模式
<C-V> : ˜q›å…¥å¯è§†åŒ–块选择模式
gv : 重新选择
o : 选择的区域头ž®„¡§»åŠ?br /> "*y : 复制选择区域到paste buffer
V% : 选择一个匹配段
V}J : åˆåÆˆä¸€ä¸ªæ®µè?br /> V}gJ : åˆåÆˆä¸€ä¸ªæ®µè½ï¼Œòq¶ä¿ç•™ç©ºæ ?br /> ----------------------------------------
" 删除选中çš?0行的前两个字½W¦ï¼ˆä¸è¿‡˜q™é‡Œåº”该假设是紧凑的排版格式åQŒä¸èƒ½åŒ…含空根{€?br /> tab½{‰å­—½W¦çš„åQŒå¯æ˜¯ç»å®žéªŒåº”该是钱3个字½W¦æ‰å¯¹å•ŠåQŸï¼ŸåQ?br /> 0<c-v>10j2ld
----------------------------------------
" 如何用可视块拯‚´å‡ åˆ—
" 可视å?òq‰™žé€šå¸¸çš?v 命ä×o)
<C-V>åQŒç„¶åŽé€šè¿‡¿UÕdЍ命ä×o选择åˆ?(win32 <C-Q>)
然后执行 c,d,y,r ½{‰å‘½ä»?br /> ----------------------------------------
" how to overwrite a visual-block of text with another such block
Pick the first block: ctrl-v move "ay
Pick the second block: ctrl-v move c ctrl-o "aP <esc>
----------------------------------------
" _vimrc 基本讄¡½®
:set incsearch : 输入搜烦命ä×oæ—Óž¼Œç«‹å³æ˜„¡¤ºç›®å‰è¾“入的模式对应的匚w…ã€‚匹配的字符ä¸?br /> 被高亮ã€?br /> :set wildignore=*.o,*.obj,*.bak,*.exe : tab补全时忽略这些忽略这äº?br /> :set shiftwidth=3 : 讄¡½®è‡ªåЍ¾~©è¿›ä¸?个字½W?br /> :set vb t_vb=". : 安静模式åQŒå…³é—­å“é“ƒè·Ÿé—ªçƒ
:set browsedir=buffer : 讄¡½®æ–‡äšg‹¹è§ˆä½¿ç”¨çš„ç›®å½?br /> “注:
”last 使用文äšg‹¹è§ˆå™¨æœ€˜q‘访问相同的目录ã€?br /> “buffer 使用相关¾~“冲区的目录ã€?br /> ”current 使用当前目录ã€?br /> “{path} 使用指定目录ã€?br /> ----------------------------------------
" 启动windows中的IE
:nmap ,f :update<CR>:silent !start c:\progra~1\intern~1\iexplore.exe
file://%:p<CR>
:nmap ,i :update<CR>: !start c:\progra~1\intern~1\iexplore.exe <cWORD><CR>
----------------------------------------
" 在vim里打开ftp
cmap ,r :Nread
ftp://209.51.134.122/public_html/index.html
cmap ,w :Nwrite ftp://209.51.134.122/public_html/index.html
gvim ftp://www.somedomain.com/index.html # 使用 netrw.vim
----------------------------------------
" 向寄存器中添加内å®?(使用相应寄存器名¿U°çš„大写)
" 复制5行放入a寄存器,然后向下跌™{10行再复制5è¡?br /> "a5yy
10j
"A5yy
----------------------------------------
[I : 昄¡¤ºå½“前行中字符的所有匹é…?­‘…çñ”有用)
----------------------------------------
" 常规¾~©è¿›
:'a,'b>> åQšå°†mark a到mark b之间的内容进行两‹Æ¡ç¾ƒ˜q?br /> " 虚拟模式下羃˜q?(可重å¤?
:vnoremap < <gv
”˜q™æ˜¯ä¸€ä¸ªè™šæ‹Ÿæ¨¡å¼ä¸‹çš„键盘映ž®?< 映射ä¸?lt;gv
"< æ„äØ“å‘å†…¾~©è¿›åQŒgv 上面已有解释åQŒäؓ重复上次选区
“<gv 也就是先向内¾~©è¿›ç„¶åŽå†é€‰æ‹©åˆšæ‰çš„选区
“˜q™æ ·ž®±å¯ä»¥åªæŒ?< 实现重复¾~©è¿›äº?br /> :vnoremap > >gv åQšå‘内羃˜q›ï¼ŒåŽŸç†åŒä¸Š
" 块羃˜q?br /> >i{
>a{
" also
>% and <%
”自己试试看吧åQŒæ¶‰åŠåˆ°ç”?{ 的语­a€å¾ˆæœ‰ç”¨ï¼Œæ¯”如c,c++½{?br /> ----------------------------------------
" 重定å?& ¾_˜è„“到寄存器 * åQ?为寄存器名称åQ?br /> :redir @* : 重定向命令到paste¾~“冲åŒ?br /> :redir END : ¾l“束
:redir >> out.txt : 重定向到文äšg
" 操作¾_˜è„“¾~“冲åŒ?br /> "*yy : 复制到寄存器
"*p : 从寄存器中粘贴一�br /> " 复制到粘贴缓冲区 (扩展模式)
:'a,'by* : 复制一个范围到¾_˜è„“寄存å™?br /> :%y* : 复制一个括号匹配到¾_˜è„“¾~“冲åŒ?br /> :.y* : 复制当前行到¾_˜è„“¾~“冲åŒ?br /> " 从剪贴板上过滤非可打印字½W?br /> " 当从一äº?GUI ½E‹åº¾_˜è„“时会有用å¤?br /> :nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
----------------------------------------
" 重新格式化文æœ?br /> gq} : åˆåÆˆä¸€ä¸ªæ®µè?br /> gqap : 当前ŒDµè½
ggVGgq : 全部ŒDµè½
Vgq : 当前�br /> " �0列的时候换�br /> :s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g
----------------------------------------
" 命ä×o使用于多个文ä»?br /> :argdo %s/foo/bar/e : 在所有文件上操做 :args
:bufdo %s/foo/bar/e
:windo %s/foo/bar/e
:argdo exe '%!sort'|w! : 包含外部命ä×o
----------------------------------------
" 命ä×o行技å·?br /> gvim -h : 昄¡¤ºå¸®åŠ©
ls | gvim - : ½Ž¡é“操作
cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " : 从管道出˜q‡æ×o内容
gvim -o file1 file2 : 分割½H—口昄¡¤ºä¸¤ä¸ªæ–‡äšg
" 打开文äšg后执行一条命ä»?br /> gvim.exe -c "/main" joe.c : 打开 joe.c & è·Œ™{åˆ?"main"
" 在打开一个文件时执行多条命ä×o
vim -c "%s/ABC/DEF/ge | update" file1.c
" 在一¾l„文件上执行多条命ä×o
vim -c "argdo %s/ABC/DEF/ge | update" *.c
" 从一¾pÕdˆ—æ–‡äšg中删除一块区åŸ?br /> vim -c "argdo /begin/+1,/end/-1g/^/d | update" *.c
" 自动¾~–辑文äšg (¾~–辑命ä×o序列Ex commands已经包含在convert.vim中了)
vim -s "convert.vim" file.c
#不加è½?vimrcè·Ÿä“Q何plugin(òq²å‡€æ¸…æ–°çš?VIM^_^)
gvim -u NONE -U NONE -N
" Access paste buffer contents (put in a script/batch file)
gvim -c 'normal ggdG"*p' c:/aaa/xp
" ž®†paste中的内容送往默认的打印机
gvim -c 's/^/\=@*/|hardcopy!|q!'
" gvim 里的 grep (win32 or *nix)
:grep somestring *.php : 创徏匚w…çš„æ–‡ä»¶åˆ—è¡?br /> " 使用 :cn(向后å? :cp(向前) 操纵列表
:h grep åQšæŸ¥çœ‹å¸®åŠ?br /> ----------------------------------------
" GVIM 的差异比�br /> gvim -d file1 file2 : vimdiff (比较不差�
dp : 把光标处的不同放到另一个文�br /> do : 在光标处从另一个文件取得不�br /> ----------------------------------------
" Vim traps
在正则表辑ּä¸?+ | ( { 都要加上转义½W?反斜æ?
/fred\+/ : 匚w… fred/freddy 但不匚w… free
/\(fred\)\{2,3}/ : note what you have to break
----------------------------------------
" \v åQŒæˆ–叫做very magic (通常都是˜q™ä¹ˆå?可以取消转义½W?br /> /codes\(\n\|\s\)*where : 普通的正则表达å¼?br /> /\vcodes(\n|\s)*where : very magic
----------------------------------------
" 把对象送到命ä×o行或者搜索行
<C-R><C-W> : 执行当前光标下的单个单词
<C-R><C-A> : 执行当前光标下尽可能多的单词
<C-R>- : 送至一个小型寄存器åQˆåŒæ ·ä‹É用于插入模式åQ?br /> <C-R>[0-9a-z] : 送至一个命名寄存器 (括弧同上)
<C-R>% : 送至文äšgå?#也行) (同上)
<C-R>=somevar : 送至一个变�(例如 :let sray="ray[0-9]")
----------------------------------------
" 控制寄存�br /> :let @a=@_ : 清除寄存�a
:let @a="" : 同上 a
:let @*=@a : 拯‚´å¯„å­˜å™?a åˆ?paste buffer
:let @*=@: : 拯‚´æœ€åŽæ‰§è¡Œçš„命ä×oåˆ?paste buffer
:let @*=@/ : 拯‚´æœ€åŽæ‰§è¡Œçš„æŸ¥æ‰¾å‘½ä×o到paste buffer
:let @*=@% : 拯‚´å½“前文äšgåˆ?paste buffer

map <f11> "qyy:let @q=@q."zzz"
----------------------------------------
" 帮助的帮助? (使用 TAB)
:h quickref : VIM 快速参考页
:h tips : Vim'自己的技巧帮�br /> :h visual<C-D><tab> : 虚拟模式的帮助列�br /> : 然后使用tab选择它们
:h ctrl<C-D> : 所有关于ctrl键的帮助列表
:helpg uganda : ˜q‡æ×o帮助文äšg 使用 :cn, :cp 查找下一个及后一ä¸?br /> :h :r : 关于 :ex 的命令帮åŠ?br /> :h CTRL-R : 普通模式相å…?br /> :h /\r : \r是什么的意æ€?br /> :h \\zs : 使用双反斜线查找关于 \zs 的帮åŠ?br /> :h i_CTRL-R : 在插入模式中 <C-R>的解é‡?br /> :h c_CTRL-R : 在命令模式中 <C-R> 的解é‡?br /> :h v_CTRL-V : 虚拟模式
:h tutor : VIM 快速指�br /> <C-[>, <C-T> : Move back & Forth in HELP History
gvim -h : VIM 命ä×o行帮åŠ?br /> ----------------------------------------
" 选项讄¡½®åœ¨é‚£é‡?br /> :scriptnames : 列出所有已¾låŠ è½½çš„ plugins, _vimrcsæ–‡äšg
:verbose set history? :昄¡¤º historyçš„å€¼åÆˆæ˜„¡¤ºåœ¨é‚£é‡Œå®šä¹‰çš„
:function : 列出所有函æ•?br /> :func SearchCompl : 昄¡¤ºæŒ‡å®šå‡½æ•°çš„细èŠ?br /> ----------------------------------------
" 制作你自å·Þqš„VIM 帮助
:helptags /vim/vim64/doc : 重新¾~–译所æœ?*.txt 的帮助文件在˜q™ä¸ªç›®å½•é‡?br /> :help add-local-help åQšå¦‚何添加本地帮åŠ?br /> ----------------------------------------
" 用外部程序运行文�(例如 php)
map <f9> :w<CR>:!c:/php/php.exe %<CR>
map <f2> :w<CR>:!perl -c %<CR>
----------------------------------------
" 在另一个buffer中,捕捉当前脚本的输å‡?br /> :new | r!perl # : 新徏一个bufferåQŒä»Žå¦ä¸€ä¸ªbuffer中读入结æž?br /> :new! x.out | r!perl # : 同上åQŒåƈ指定一个新文äšgå?br /> :new+read!ls
----------------------------------------
" create a new buffer, paste a register "q" into it, then sort new buffer
:new +put q|%!sort
----------------------------------------
" 插入DOS换行½W?br /> :%s/$/\<C-V><C-M>&/g : (that's what you type
:%s/$/\<C-Q><C-M>&/g : for Win32) 对于Win32应该˜q™æ ·
:%s/$/\^M&/g : 你看到的^M是一个字½W?br /> ----------------------------------------
" 自动删除行尾 Dos回èžR½W¦å’Œ½Iºæ ¼
autocmd BufRead * silent! %s/[\r \t]\+$//
autocmd BufEnter *.php :%s/[ \t\r]\+$//e
----------------------------------------
" å¯ÒŽŒ‡å®šæ–‡ä»¶æˆ–æ–‡äšg¾cÕdž‹æ‰§è¡ŒæŸä¸ªåŠ¨ä½œ
autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?
autocmd FileType *.pl exec('set fileformats=unix')
----------------------------------------
" 把最后一个命令脓到当前位¾|?br /> i<c-r>:
" 把最后一个搜索指令脓到当前位¾|?br /> i<c-r>/
----------------------------------------
" 更多的完成功èƒ?br /> <C-X><C-F> :插入当前目录下的一个文件名到当前位¾|?br /> # 在insert模式下ä‹Éç”?br /> # 然后ç”?Ctrl-P/Ctrl-N ¾˜»é¡µ
----------------------------------------
" 替换一个visual区域
" 选择一个区域,然后输入 :s/Emacs/Vim/ ½{‰ç­‰åQŒvim会自动进å…?模式
:'<,'>s/Emacs/Vim/g : 前面çš? '<.'> 是vim自动æ·ÕdŠ çš?br /> gv : 重新选择前一个可视区åŸ?(ULTRA)
----------------------------------------
" 在文件中插入行号
:g/^/exec "s/^/".strpart(line(".")." ", 0, 4)
:%s/^/\=strpart(line(".")." ", 0, 5)
:%s/^/\=line('.'). ' '
----------------------------------------
#用VIM的方式来¾~–号è¡?br /> :set number : 昄¡¤ºè¡Œå·
:map <F12> :set number!<CR> : Show linenumbers flip-flop
:%s/^/\=strpart(line('.')." ",0,&ts)
#从ä“Q意行开始编å?需要perl)
:'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'
#产生数字列表
#Type in number on line say 223 in an empty file
qqmnYP`n^Aq : in recording q repeat with @q
" 递增已存在数字到文äšgæœ?br /> :.,$g/^\d/exe "normal! \<c-a>"
" 高çñ”递增åQŒå‚见:
http://vim.sourceforge.net/tip_view.php?tip_id=150
----------------------------------------
" 高çñ”递增 (真的很有ç”?
" 把下面几句放�_vimrc
let g:I=0
function! INC(increment)
let g:I =g:I + a:increment
return g:I
endfunction
" 例如从mark a 到mark b 递增åQŒä»Ž223开始,步长ä¸?
:let I=223
:'a,'bs/^/\=INC(5)/
" create a map for INC
cab viminc :let I=223 \| 'a,'bs/$/\=INC(5)/
----------------------------------------
" 生成�23-64 的数字列�br /> o23<ESC>qqYp<C-A>q40@q
----------------------------------------
" 在当前插入模式下¾~–辑/¿UÕdЍ (真得很有ç”?
<C-U> : 删除全部
<C-W> : 删除最后一个单è¯?br /> <HOME><END> : ¿UÕdŠ¨åˆ°è¡Œé¦?行尾
<C-LEFTARROW><C-RIGHTARROW> : 向前/后移动一个单�br /> <C-X><C-E>,<C-X><C-Y> : scroll while staying put in insert
----------------------------------------
#加密(ž®å¿ƒä½¿ç”¨åQŒä¸è¦å¿˜äº†å¯†ç ?
:X : vim会提½CÞZ½ è¾“入密码
:h :X
----------------------------------------
" 模式è¡?(使文件只è¯È­‰)åQŒå¿…™åÕdœ¨å‰?å?5行内
// vim:noai:ts=2:sw=4:readonly:
" vim:ft=html: : 使用 HTML 语法高亮
:h modeline
----------------------------------------
" 建立你自å·Þqš„菜单™å?br /> amenu Modeline.Insert\ a\ VIM\ modeline <Esc><Esc>ggOvim:ff=unix ts=4 ss=4<CR>
vim60:fdm=marker<esc>gg
----------------------------------------
" 一个保存当前光标下的狭义字åˆîC¸€ä¸ªæ–‡ä»¶çš„函数
function! SaveWord()
normal yiw
exe ':!echo '.@0.' >> word.txt'
endfunction
map ,p :call SaveWord()
----------------------------------------
" 删除重复行的函数
function! Del()
if getline(".") == getline(line(".") - 1)
norm dd
endif
endfunction

:g/^/ call Del() #使用该函数的一个例�br /> ----------------------------------------
" 双字节编�(non alpha-numerics)
:digraphs : 昄¡¤º¾~–码è¡?br /> :h dig : 帮助
i<C-K>e' : 输入 é
i<C-V>233 : 输入 é (Unix)
i<C-Q>233 : 输入 é (Win32)
ga : 查看字符的hex�br /> #删除�ascii 字符
:%s/[<C-V>128-<C-V>255]//gi : where you have to type the Control-V
:%s/[?-?]//gi : Should see a black square & a dotted y
:%s/[<C-V>128-<C-V>255<C-V>01-<C-V>31]//gi : All pesky non-asciis
:exec "norm /[\x00-\x1f\x80-\xff]/" : same thing
#Pull a non-ascii character onto search bar
yl/<C-R>" :
/[^a-zA-Z0-9_[:space:][:punct:]] : search for all non-ascii
----------------------------------------
" æ–‡äšg名自动完æˆ?(例如 main_c.c)
:e main_<tab> : tab 键完�br /> gf : 打开光标处广义字命名的文�(normal模式)
main_<C-X><C-F> : æ–‡äšg名自动完æˆ?insert模式)
----------------------------------------
" Vim复杂使用
" 交换两个单词
:%s/\<\(on\|off\)\>/\=strpart("offon", 3 * ("off" == submatch(0)), 3)/g
" 交换两个单词
:vnoremap <C-X> <Esc>`.``gvP``P
----------------------------------------
" 把textæ–‡äšg转换成htmlæ–‡äšg(oh,ft)
:runtime! syntax/2html.vim : 转换 txt �html
:h 2html
----------------------------------------
" VIM 有一个内部自带的 grep 命ä×o
:grep some_keyword *.c : 得到一个包含some_keywordçš„cæ–‡äšg名列è¡?br /> :cn : åŽÖM¸‹ä¸€ä¸ªå‡ºçŽ°çš„ä½ç½®
----------------------------------------
" 强制无扩展名的文件的语法着色方�br /> :set syntax=perl
" 取消语法着�(很有�
:set syntax off
" 改变色彩主题 (在~vim/vim??/colors中的ä»ÖM½•æ–‡äšg)
:colorscheme blue
" 通过使用模式行强˜q«ä‹Éç”?HTML 语法高亮
# vim:ft=html:
" 强制自动语法加亮(非标准的文äšg扩展)
au BufRead,BufNewFile */Content.IE?/* setfiletype html
----------------------------------------
:set noma (non modifiable) : 防止修改
:set ro (Read Only) : 只读保护
----------------------------------------
" 对话 (打开一堆文�
gvim file1.c file2.c lib/lib.h lib/lib2.h : åœ?对话"中加载这些文ä»?br /> :mksession : 生成一个Sessionæ–‡äšg (默认是Session.vim)
:q
gvim -S Session.vim : 重新加蝲所有文�br /> ----------------------------------------
#标记(tags) (è·Œ™{到子½E‹åº/函数)
taglist.vim : 很流行的插äšg
:Tlist : 昄¡¤ºæ ‡è®° (函数列表)
<C-]> : è·Œ™{到光标处的函æ•?br /> ----------------------------------------
" columnise a csv file for display only as may crop wide columns
:let width = 20
:let fill=' ' | while strlen(fill) < width | let fill=fill.fill | endwhile
:%s/\([^;]*\);\=/\=strpart(submatch(1).fill, 0, width)/ge
:%s/\s\+$//ge
" Highlight a particular csv column (put in .vimrc)
function! CSVH(x)
execute 'match Keyword /^\([^,]*,\)\{'.a:x.'}\zs[^,]*/'
execute 'normal ^'.a:x.'f,'
endfunction
command! -nargs=1 Csv :call CSVH(<args>)
" call with
:Csv 5 : highlight fifth column
----------------------------------------
" 折叠åQšéšè—æŸäº›ç‰‡æ–­ï¼Œä½¿æŸ¥çœ‹æ›´å®ÒŽ˜“
zf} : 使用动作命ä×o折叠一个段è?br /> v}zf : 使用可视模式折叠一个段è?br /> zf'a : 折叠åˆîC¸€ä¸ªæ ‡è®îC¸Š
zo : 打开折叠
zc : 重新关闭折叠
----------------------------------------
" 昄¡¤º"不可见字½W?
:set list
:h listchars
----------------------------------------
" 如何在不˜q›å…¥æ’入模式的情况下¾_˜è„“"普通模式的命ä×o"
:norm qqy$jq
----------------------------------------
" 处理文äšgå?br /> :h filename-modifiers : 帮助
:w % : 写入当前文äšg
:w %:r.cfm : 改变文äšgæ‰©å±•åäØ“ .cfm
:!echo %:p : 昄¡¤ºå®Œæ•´è·¯å¾„和文件名
:!echo %:p:h : 只显½Cºå®Œæ•´èµ\å¾?br /> :!echo %:t : 只显½Cºæ–‡ä»¶å
:reg % : 昄¡¤ºæ–‡äšgå?br /> <C-R>% : 插入文äšgå?(插入模式)
"%p : 插入文äšgå?(普通模å¼?
/<C-R>% : 在文本中查找文äšgå?br /> ----------------------------------------
" 删除åQŒä½†ä¸ç ´å?buffer 内容
"_d : 你一直想要的东西
"_dw : 例如åQšåˆ é™¤ä¸€ä¸ªå•è¯?(使用黑洞???)
----------------------------------------
" 送完整的路径名到剪脓板,用于邮äšg附äšg½{?br /> nnoremap <F2> :let @*=expand("%:p")<cr> :unix
nnoremap <F2> :let @*=substitute(expand("%:p"), "/", "\\", "g")<cr> :win32
----------------------------------------
" 不用¼›Õd¼€ Vim ž®Þpƒ½ä¿®æ”¹æ–‡äšg名的½Ž€å?shell 脚本
$ vim
:r! ls *.c
:%s/\(.*\).c/mv & \1.bla
:w !sh
:q!
----------------------------------------
" 在一个文本里计算单词�br /> g<C-G>
----------------------------------------
" 你自å·Þp®¾¾|®é«˜äº®æ˜¾½Cºçš„例子
:syn match DoubleSpace " "
:hi def DoubleSpace guibg=#e0e0e0
----------------------------------------
" reproduce previous line word by word
imap ] @@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
nmap ] i@@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
" æ ÒŽ®æ–‡äšg¾cÕdž‹æ˜ å°„快捷é”?br /> :autocmd bufenter *.tex map <F1> :!latex %<CR>
:autocmd bufenter *.tex map <F2> :!xdvi -hush %<.dvi&<CR>
----------------------------------------
" è¯Õd– MS-Word 文档åQŒéœ€è¦?antiword
:autocmd BufReadPre *.doc set ro
:autocmd BufReadPre *.doc set hlsearch!
:autocmd BufReadPost *.doc %!antiword "%"
----------------------------------------
" a folding method
vim: filetype=help foldmethod=marker foldmarker=<<<,>>>
A really big section closed with a tag <<<
--- remember folds can be nested ---
Closing tag >>>
----------------------------------------
" Just Another Vim Hacker JAVH
vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"
# 译释åQšå‘µå‘µï¼Œè°æ¥è§£é‡Šä¸€ä¸‹å§åQ?br /> # 其实不过是在启动vim的时候执行了一个命ä»?br /> # 先写入了 Just Another Vim Hacker çš„rot13¾~–码
# 然后再解�/font>



]]>
vim 昄¡¤ºè¡Œå·ã€è¯­æ³•高亮、自动羃˜q›çš„讄¡½®http://www.aygfsteel.com/lingy/archive/2009/09/02/293574.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Wed, 02 Sep 2009 04:24:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/09/02/293574.html在Ubuntu中vim的配¾|®æ–‡ä»¶å­˜æ”‘Öœ¨/etc/vim目录中,配置文äšgåäØ“vimrc

在Fedora中vim的配¾|®æ–‡ä»¶å­˜æ”‘Öœ¨/etc目录中,配置文äšgåäØ“vimrc

在终ç«?输入以下命ä×o来编辑vimrc配置文äšgåQ?br /> sudo vim /etc/vim/vimrc
或�sudo gedit /etc/vim/vimrc

1、显½Cø™¡Œå?br />   
在文件末端添加一新行åQŒè¾“å…?set nu

2、语法高äº?br /> 在文件中扑ֈ° "syntax on   ˜q™ä¸€è¡Œï¼ŒåŽÀLŽ‰å‰é¢çš„åŒå¼•å·"åQŒåŒå¼•号是注释的意æ€?/p>

3、自动羃˜q?/p>

在文件末ž®¾æ·»åŠ ä¸€è¡Œï¼Œè¾“å…¥  set autoindent
在添加一行,输入         set cindent
其中 autoindent 是自动羃˜q›ï¼› cindent是特别针å¯?C语言语法自动¾~©è¿›

注意åQšå¦‚果设¾|®å¥½ä»¥ä¸Šè®„¡½®åŽï¼ŒVIM没有作出相应的动作,那么请你把你的VIM升çñ”到最新版åQŒä¸€èˆ¬åªè¦åœ¨¾lˆç«¯è¾“入以下命ä×o卛_¯åQšsudo apt-get install vim

¼œå¤§å®¶ä‹É用VIM愉快åQ?/p>

 


下面告诉大家怎么在linux下学习CåQŒC在linux下的¾~–译器是gccåQŒä½ åœ¨ç»ˆç«¯ç”¨vim输入C的源ç ?/p>

          如下保存到hello.c然后在命令行˜qè¡ŒåQ?/p>

 

          åQ?gcc hello.c -o hello

 

          ˜q™æ ·ä¼šç”Ÿæˆä¸€ä¸ªhello的可执行文äšgåQŒåœ¨å‘½ä×o行里输入åQ?/p>

 

          åQ?./hello

 

          ž®Þpƒ½˜qè¡Œåˆšåˆšä½ ç¼–译的C源码äº?/p>

 

            linux下同样也能编译C++åQŒlinux下C++¾~–译器是gåQ‹ï¼‹åQŒç‰¹åˆ«æ½Cºï¼š

            C++的头文äšg是iostream不是iostream.h另外˜q˜éœ€åŠ å…¥å‘½å½Iºé—´stdåQŒä¾‹å¦‚:

            //hello.cpp

            #include <iostream>

            using namespace std;

            int main ()

            {

                  cout<<"helloworld!"<<endl;

             }

 

            ˜q™æ ·æ‰èƒ½æ­£å¸¸¾~–译åQŒåœ¨è¯¥ç›®å½•下åQŒç»ˆç«¯è¾“入:

 

            # g++ hello.cpp -o hello

          

            ˜q™æ ·ž®Þq”Ÿæˆä¸€ä¸ªhello的可执行文äšgåQŒåŒæ ?/hello命ä×o˜qè¡Œå®?/p>

 

本文来自CSDN博客åQŒè{载请标明出处åQšhttp://blog.csdn.net/Dreamcode/archive/2009/05/11/4166995.aspx



]]>
一个简单的逻辑备䆾½{–略学习 http://www.aygfsteel.com/lingy/archive/2009/07/10/286287.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Fri, 10 Jul 2009 08:58:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/07/10/286287.html一个简单的逻辑备䆾½{–略学习
需求:
每天19:00备䆾一‹Æ¡ä¸šåŠ¡ç”¨æˆ?br /> 每个备䆾最多保ç•?å¤?br /> 每个备䆾用日期作为备份文件的名称

[root@localhost opt]# cat /home/autoBackup/ora_env
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/10.2.0
export ORACLE_SID=STAPLES
export ORACLE_TERM=xterm
#export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$PATH:$ORACLE_HOME/bin

export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/jlib
export JAVA_HOME=$ORACLE_HOME/jdk
export ORA_NLS10=$ORACLE_HOME/nls/data
export LC_CTYPE=en_US.UTF-8

[root@localhost opt]# cat /opt/backup_exp.sh
#!/bin/sh
#CREATORåQšdaimin
#functionåQšbackup database with expdp
#usageåQšcrontab on linux
#last modifyåQštuolei 2007-08-29 create
#set environment variable
. /home/autoBackup/ora_env  #讄¡½®exp的环境变é‡?br /> #开始备份,假定目录backupPath已经创徏åQŒåƈ且backupPath=/opt/oracle/backup
backupPath='/opt/oracle/backup/'
FILE=`date +%Y%m%d`'.dmp'
LOGFILE=`date +%Y%m%d`'.log'
exp daimin/daimin@STAPLES file=$backupPath$FILE.dmp log=$backupPath$LOGFILE

#删除以前˜q‡æœŸçš„备ä»?br /> find /opt/oracle/backup/* -name "*.dmp" -mtime +4 -exec rm {} \;

 

[root@localhost etc]# crontab -e
0 19 * * * /opt/backup_exp.sh > /opt/oracle/backup/logs/backup_exp.log 2>&1
~
"crontab.XXXXmfkudb" 1L, 76C written
crontab: installing new crontab
[root@localhost etc]# crontab -l
0 19 * * * /opt/backup_exp.sh > /opt/oracle/backup/logs/backup_exp.log 2>&1

注意åQ?br /> 1ã€?opt/backup_exp.sh需要具有可执行权限åQŒæ‰å¯ä»¥è¢«root用户执行
[root@localhost backup]# chmod +x /opt/backup_exp.sh
否则会出�bin/sh: /opt/backup_exp.sh: Permission denied错误
2、需要在脚本的第一行加#!/bin/sh
否则会出�bin/sh: /opt/backup_exp.sh: cannot execute binary file错误
3、注意在执行exp命ä×o之前åQŒéœ€è¦è®¾¾|®çŽ¯å¢ƒå˜é‡ï¼Œæ‰€ä»¥åœ¨é€»è¾‘å¤‡ä†¾è„šæœ¬ä¸­æ‰§è¡Œäº†. /home/autoBackup/ora_env 命ä×o;


参考网™åµï¼š
http://blog.csdn.net/wzy0623/archive/2008/10/31/3193150.aspx
http://www.linuxsir.org/main/?q=node/209


本文来自CSDN博客åQŒè{载请标明出处åQšhttp://blog.csdn.net/daimin1983/archive/2008/12/13/3511380.aspx



]]>
Linux¾pȝ»Ÿåˆ©ç”¨Crontab命ä×o实现定时重启http://www.aygfsteel.com/lingy/archive/2009/07/10/286193.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Fri, 10 Jul 2009 03:01:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/07/10/286193.html  Crontab是一个很方便的在unix/linux¾pȝ»Ÿä¸Šå®šæ—?循环)执行某个ä»ÕdŠ¡çš„ç¨‹åº?

  使用cron服务åQŒç”¨ service crond status 查看 cron服务状态,如果没有启动åˆ?service crond start启动它,

  cron服务是一个定时执行的服务åQŒå¯ä»¥é€šè¿‡crontab 命ä×oæ·ÕdŠ æˆ–è€…ç¼–è¾‘éœ€è¦å®šæ—¶æ‰§è¡Œçš„ä»ÕdŠ¡åQ?

  crontab -u //è®‘Ö®šæŸä¸ªç”¨æˆ·çš„cron服务åQŒä¸€èˆ¬root用户在执行这个命令的时候需要此参数

  crontab -l //列出某个用户cron服务的详¾l†å†…å®?

  crontab -r //删除没个用户的cron服务

  crontab -e //¾~–辑某个用户的cron服务

  比如说root查看自己的cron讄¡½®åQšcrontab -u root -l

  再例如,root惛_ˆ é™¤fredçš„cron讄¡½®åQšcrontab -u fred -r

  在编辑cron服务æ—Óž¼Œ¾~–辑的内å®ÒŽœ‰ä¸€äº›æ ¼å¼å’Œ¾U¦å®šåQŒè¾“入:crontab -u root -e

  ˜q›å…¥vi¾~–辑模式åQŒç¼–辑的内容一定要½W¦åˆä¸‹é¢çš„æ ¼å¼ï¼š*/1 * * * * ls >> /tmp/ls.txt

  ¾~–辑/etc/crontabæ–‡äšgåQŒåœ¨æœ«å°¾åŠ ä¸Šä¸€è¡Œï¼š 30 5 * * * root init 6 ˜q™æ ·ž®±å°†¾pȝ»Ÿé…ç½®ä¸ÞZº†æ¯å¤©æ—©ä¸Š5ç‚?0自动重新启动ã€?

  需要将crond讄¡½®ä¸ºç³»¾lŸå¯åŠ¨åŽè‡ªåŠ¨å¯åŠ¨çš„æœåŠ¡ï¼Œå¯ä»¥åœ?etc/rc.d/rc.local 中,在末ž®‘ÖŠ ä¸?

  service crond start

  如果˜q˜éœ€è¦åœ¨¾pȝ»Ÿå¯åŠ¨ååŠ è½½å…¶ä»–æœåŠ¡ï¼Œå¯ä»¥¾l§ç®‹åŠ ä¸Šå…¶ä»–æœåŠ¡çš„å¯åŠ¨å‘½ä»¤ã€?

  比如åQ?service mysqld start

  基本用法:

  1. crontab -l

  列出当前的crontabä»ÕdŠ¡

  2. crontab -d

  删除当前的crontabä»ÕdŠ¡

  3. crontab -e (solaris5.8上面�crontab -r)

  ¾~–辑一个crontabä»ÕdŠ¡,ctrl_D¾l“束

  4. crontab filename

  以filenameåšäØ“crontabçš„ä“QåŠ¡åˆ—è¡¨æ–‡ä»¶åÆˆè½½å…¥

  crontab file的格�

  crontab æ–‡äšg中的行由 6 个字ŒD늻„成,不同字段间用½Iºæ ¼æˆ?tab 键分隔。前 5 个字ŒD‰|Œ‡å®šå‘½ä»¤è¦˜qè¡Œçš„æ—¶é—?

  分钟 (0-59)

  ž®æ—¶ (0-23)

  日期 (1-31)

  月䆾 (1-12)

  星期å‡?0-6åQŒå…¶ä¸?0 代表星期æ—?

  ½W?6 个字ŒD‰|˜¯ä¸€ä¸ªè¦åœ¨é€‚当旉™—´æ‰§è¡Œçš„å­—½W¦ä¸²

  例子:

  #MIN HOUR DAY MONTH DAYOFWEEK COMMAND

  #每天早上6�0�

  10 6 * * * date

  #每两个小�

  0 */2 * * * date (solaris 5.8ä¼ég¹Žä¸æ”¯æŒæ­¤¿Uå†™æ³?

  #晚上11点到早上8点之间每两个ž®æ—¶åQŒæ—©ä¸?ç‚?

  0 23-7/2åQ? * * * date

  #每个月的4号和每个½C¼æ‹œçš„礼拜一到礼拜三的早ä¸?1ç‚?

  0 11 4 * mon-wed date

  #1月䆾日早��

  0 4 1 jan * date

  补充åQšåœ¨ä½¿ç”¨crontab的时候,要特别注意的是运行脚本中能够讉K—®åˆ°çš„环境变量和当前测试环境中的环境变量未必一è‡ß_¼Œä¸€ä¸ªæ¯”较保险的做法是在˜qè¡Œçš„脚本程序中自行讄¡½®çŽ¯å¢ƒå˜é‡(export)

  (1)先徏一个文件crond.txt如下åQ?每天早上5ç‚?6分重新启åŠ?

  36 5 * * * reboot

  (2)上传�opt目录

  (3)˜qè¡Œå‘½ä×o

  crontab /opt/crond.txt

  crontab -l

  让配¾|®æ–‡ä»¶ç”Ÿæ•ˆï¼šå¦‚果让配¾|®æ–‡ä»¶ç”Ÿæ•ˆï¼Œ˜q˜å¾—重新启动cronåQŒåˆ‡è®ŽÍ¼Œæ—¢ç„¶æ¯ä¸ªç”¨æˆ·ä¸‹çš„cron配置文äšg修改后。也要重新启动cron服务器ã€?

  在Fedora 和Redhat中,我们应该用;

  [root@localhost ~]# /etc/init.d/crond restart

  如果让crond 在开机时˜qè¡ŒåQŒåº”该改变其˜qè¡Œ¾U§åˆ«åQ?

  [root@localhost ~]# chkconfig --levels 35 crond on

  service crond status 查看 cron服务状态,如果没有启动åˆ?service crond start启动它, cron服务是一个定时执行的服务åQŒå¯ä»¥é€šè¿‡crontab 命ä×oæ·ÕdŠ æˆ–è€…ç¼–è¾‘éœ€è¦å®šæ—¶æ‰§è¡Œçš„ä»ÕdŠ¡

Crontabæ–‡äšg的每一行由六个åŸ?minutes、hours、day of month、month、day of weekã€?command)¾l?成,域之间用½Iºæ ¼æˆ–Tab分开åQŒå…¶ä¸­ï¼š

minutesåQ?分钟域,值的范围æ˜?åˆ?9

hoursåQ?ž®æ—¶åŸŸï¼Œå€¼çš„范围æ˜?åˆ?3

day of monthåQ?日期åQŒå€¼çš„范围æ˜?åˆ?1

monthåQ?月䆾åQŒå€¼çš„范围æ˜?åˆ?2

day of weekåQ?星期åQŒå€¼çš„范围æ˜?åˆ?åQŒæ˜ŸæœŸæ—¥å€égØ“0

commandåQ?所要运行的命ä×o

如果一个域æ˜?åQŒè¡¨æ˜Žå‘½ä»¤å¯ä»¥åœ¨è¯¥åŸŸæ‰€æœ‰å¯èƒ½çš„å–å€ÆDŒƒå›´å†…执行ã€?

如果一个域是由˜qžå­—½W¦éš”开的两个数字,表明命ä×o可以在两个数字之间的范围内执行(包括两个数字 本èínåQ‰ã€?

如果一个域是由逗号隔开的一¾pÕdˆ—值组成的åQŒè¡¨æ˜Žå‘½ä»¤å¯ä»¥åœ¨˜q™äº›å€¼ç»„成的范围内执行ã€?

如果日期域和星期域都有å€û|¼Œåˆ™è¿™ä¸¤ä¸ªåŸŸéƒ½æœ‰æ•ˆã€?

¾~–写一个文ä»Óž¼Œç”¨ä»¥å¯åŠ¨è‡ªåŠ¨å¤‡ä†¾˜q›ç¨‹ã€?

cd /opt

touch reboot.txt

在reboot.txt中添加一下内�

0 4 * * * reboot

crontab /opt/reboot.txt

用crontab -e¾~–辑定时操作åQŒä¾‹å¦‚加入下行命令:

用crontab åQl命ä×o来查çœ?

注意:需要启动服åŠ?æ·ÕdŠ åœ¨rc.localä¸?

重启crondä»ÕdŠ¡

/etc/init.d/cron restart (ubuntu�

½W¬ä¸€¿U?在Fedora或Redhat ½{‰ä»¥RPM包管理的¾pȝ»Ÿä¸­ï¼›

[root@localhost ~]# /etc/init.d/crond start

[root@localhost ~]# /etc/init.d/crond stop

[root@localhost ~]# /etc/init.d/crond restart

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

命ä×o½Ž€ä»?

crontab-操作每个用户的守护程序和该执行的旉™—´è¡¨ã€?

部分参数说明

crontab file [-u user]-用指定的文äšg替代目前的crontabã€?

crontab-[-u user]-用标准输入替代目前的crontab.

crontab-1[user]-列出用户目前的crontab.

crontab-e[user]-¾~–辑用户目前的crontab.

crontab-d[user]-删除用户目前的crontab.

crontab-c dir- 指定crontab的目录�

crontabæ–‡äšg的格式:M H D m d cmd.

M: 分钟åQ?-59åQ‰ã€?

HåQšå°æ—Óž¼ˆ0-23åQ‰ã€?

DåQšå¤©åQ?-31åQ‰ã€?

m: 月(1-12åQ‰ã€?

d: 一星期内的天(0~6åQ?为星期天åQ‰ã€?

cmd要运行的½E‹åºåQŒç¨‹åºè¢«é€å…¥sh执行åQŒè¿™ä¸ªshell只有USER,HOME,SHELL˜q™ä¸‰ä¸ªçŽ¯å¢ƒå˜é‡ã€?

下面是一个例子文ä»Óž¼š

#MIN HOUR DAY MONTH DAYOFWEEK COMMAND
            #每天早上6�
            106* * * date
            #每两个小�
            0*/2* * * date
            #晚上11点到早上8点之间每两个ž®æ—¶åQŒæ—©ä¸Šéƒ¨ç‚?
            0 23-7/2åQ?* * * date
            #每个月的4号和每个½C¼æ‹œçš„礼拜一到礼拜三的早ä¸?1ç‚?
            0 11 4* mon-wed date
            #1月䆾日早��
            0 4 1 jan* date
            范例
            lark:~>crontab-1 列出用户目前的crontab.
            #MIN HOUR DAY MONTH DAYOFWEEK COMMAND
            10 6* * * date
            0*/2* * * date
            0 23-7/2,8 * * * date
            lark:~>

åQˆè´£ä»È¼–辑:云子åQ?



]]>
Linux定时ä»ÕdŠ¡¾pȝ»ŸCron入门http://www.aygfsteel.com/lingy/archive/2009/07/09/286135.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Thu, 09 Jul 2009 10:38:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/07/09/286135.htmlcron是一个linux下的定时执行工具åQŒå¯ä»¥åœ¨æ— éœ€äººå·¥òq²é¢„的情况下˜qè¡Œä½œä¸šã€‚由于Cron 是Linux的内¾|®æœåŠ¡ï¼Œä½†å®ƒä¸è‡ªåŠ¨è“v来,可以用以下的æ–ÒŽ³•启动、关闭这个服务:

 

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

 

 

你也可以ž®†è¿™ä¸ªæœåŠ¡åœ¨¾pȝ»Ÿå¯åŠ¨çš„æ—¶å€™è‡ªåŠ¨å¯åŠ¨ï¼š

 

åœ?etc/rc.d/rc.local˜q™ä¸ªè„šæœ¬çš„æœ«ž®‘ÖŠ ä¸Šï¼š

/sbin/service crond start

 

现在Cron˜q™ä¸ªæœåŠ¡å·²ç»åœ¨è¿›½E‹é‡Œé¢äº†åQŒæˆ‘们就可以用这个服务了åQŒCron服务提供以下几种接口供大家ä‹É用:

 

1.直接用crontab命ä×o¾~–辑

 

cron服务提供crontab命ä×o来设定cron服务的,以下是这个命令的一些参æ•îC¸Žè¯´æ˜ŽåQ?/p>

 

crontab -u //è®‘Ö®šæŸä¸ªç”¨æˆ·çš„cron服务åQŒä¸€èˆ¬root用户在执行这个命令的时候需要此参数

 

crontab -l //列出某个用户cron服务的详¾l†å†…å®?/p>

 

crontab -r //删除没个用户的cron服务

 

crontab -e //¾~–辑某个用户的cron服务

 

比如说root查看自己的cron讄¡½®åQšcrontab -u root -l

 

再例如,root惛_ˆ é™¤fredçš„cron讄¡½®åQšcrontab -u fred -r

 

在编辑cron服务æ—Óž¼Œ¾~–辑的内å®ÒŽœ‰ä¸€äº›æ ¼å¼å’Œ¾U¦å®šåQŒè¾“入:crontab -u root -e

 

˜q›å…¥vi¾~–辑模式åQŒç¼–辑的内容一定要½W¦åˆä¸‹é¢çš„æ ¼å¼ï¼š*/1 * * * * ls >> /tmp/ls.txt

 

˜q™ä¸ªæ ¼å¼çš„前一部分是对旉™—´çš„设定,后面一部分是要执行的命令,如果要执行的命ä×o太多åQŒå¯ä»¥æŠŠ˜q™äº›å‘½ä×oå†™åˆ°ä¸€ä¸ªè„šæœ¬é‡Œé¢ï¼Œç„¶åŽåœ¨è¿™é‡Œç›´æŽ¥è°ƒç”¨è¿™ä¸ªè„šæœ¬å°±å¯ä»¥äº†ï¼Œè°ƒç”¨çš„æ—¶å€™è®°å¾—å†™å‡ºå‘½ä»¤çš„å®Œæ•´è·¯å¾„ã€‚æ—¶é—´çš„è®‘Ö®šæˆ‘ä»¬æœ‰ä¸€å®šçš„¾U¦å®šåQŒå‰é¢äº”ä¸?å·ä»£è¡¨äº”ä¸ªæ•°å­—ï¼Œæ•°å­—çš„å–å€ÆDŒƒå›´å’Œå«ä¹‰å¦‚下åQ?/p>

 

分钟 åQ?-59åQ?/p>

 

ž®æ™‚ åQ?-23åQ?/p>

 

日期 åQ?-31åQ?/p>

 

月䆾 åQ?-12åQ?/p>

 

星期 åQ?-6åQ?/0代表星期å¤?/p>

 

除了数字˜q˜æœ‰å‡ ä¸ªä¸ªç‰¹ŒDŠçš„½W¦å·ž®±æ˜¯"*"ã€?/"å’?-"ã€?,"åQ?ä»£è¡¨æ‰€æœ‰çš„å–å€ÆDŒƒå›´å†…的数字,"/"代表每的意æ€?"*/5"表示æ¯?个单位,"-"代表从某个数字到某个数字,","分开几个¼›ÀL•£çš„æ•°å­—。以下ä‹D几个例子说明问题åQ?/p>

 

每天早上6�/p>

 

0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echoåQŒä»Žå±å¹•上看不到ä»ÖM½•输出åQŒå› ä¸ºcron把ä“Q何输出都email到root的信½Ž×ƒº†ã€?/p>

 

每两个小�/p>

 

0 */2 * * * echo "Have a break now." >> /tmp/test.txt

 

晚上11点到早上8点之间每两个ž®æ—¶åQŒæ—©ä¸Šå…«ç‚?/p>

 

0 23-7/2åQ? * * * echo "Have a good dreamåQšï¼‰" >> /tmp/test.txt

 

每个月的4号和每个½C¼æ‹œçš„礼拜一到礼拜三的早ä¸?1ç‚?/p>

 

0 11 4 * 1-3 command line

 

1�日早��/p>

 

0 4 1 1 * command line

 

每次¾~–辑完某个用æˆïLš„cron讄¡½®åŽï¼Œcron自动åœ?var/spool/cron下生成一个与此用户同名的文äšgåQŒæ­¤ç”¨æˆ·çš„cron信息都记录在˜q™ä¸ªæ–‡äšg中,˜q™ä¸ªæ–‡äšg是不可以直接¾~–辑的,只可以用crontab -e 来编辑。cron启动后每˜q‡ä¸€ä»½é’Ÿè¯ÖM¸€‹Æ¡è¿™ä¸ªæ–‡ä»Óž¼Œ‹‚€æŸ¥æ˜¯å¦è¦æ‰§è¡Œé‡Œé¢çš„命令。因此此文äšg修改后不需要重新启动cron服务ã€?/p>

 

2.¾~–辑/etc/crontab æ–‡äšg配置cron

 

cron服务每分钟不仅要è¯ÖM¸€‹Æ?var/spool/cron内的所有文ä»Óž¼Œ˜q˜éœ€è¦è¯»ä¸€‹Æ?etc/crontab,因此我们配置˜q™ä¸ªæ–‡äšg也能˜qç”¨ cron服务做一些事情。用crontab配置是针å¯ÒŽŸä¸ªç”¨æˆïLš„åQŒè€Œç¼–è¾?etc/crontab是针对系¾lŸçš„ä»ÕdŠ¡ã€‚æ­¤æ–‡äšg的文件格式是åQ?/p>

 

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root //如果出现错误åQŒæˆ–者有数据输出åQŒæ•°æ®ä½œä¸ºé‚®ä»¶å‘¾l™è¿™ä¸ªå¸å?/p>

HOME=/ //使用者运行的路径,˜q™é‡Œæ˜¯æ ¹ç›®å½•

# run-parts

01 * * * * root run-parts /etc/cron.hourly //每小时执�etc/cron.hourly内的脚本

02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本

22 4 * * 0 root run-parts /etc/cron.weekly //每星期执�etc/cron.weekly内的脚本

42 4 1 * * root run-parts /etc/cron.monthly //每月åŽÀL‰§è¡?etc/cron.monthly内的脚本

 

大家注意"run-parts"˜q™ä¸ªå‚数了,如果åŽÀLމ˜q™ä¸ªå‚数的话åQŒåŽé¢å°±å¯ä»¥å†™è¦˜qè¡Œçš„æŸä¸ªè„šæœ¬ååQŒè€Œä¸æ˜¯æ–‡ä»¶å¤¹åäº†



]]>
Ubuntu Linux¾pȝ»Ÿä¸‹Apt-get命ä×o参数详解http://www.aygfsteel.com/lingy/archive/2009/06/13/282008.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Sat, 13 Jun 2009 04:28:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/06/13/282008.html    apt-cache search package 搜烦åŒ?/p>

    apt-cache show package 获取包的相关信息åQŒå¦‚说明、大ž®ã€ç‰ˆæœ¬ç­‰

    sudo apt-get install package 安装åŒ?/p>

    sudo apt-get install package - - reinstall 重新安装åŒ?/p>

    sudo apt-get -f install 修复安装"-f = ——fix-missing"

    sudo apt-get remove package 删除åŒ?/p>

    sudo apt-get remove package - - purge 删除包,包括删除配置文äšg½{?/p>

    sudo apt-get update æ›´æ–°æº?/p>

    sudo apt-get upgrade 更新已安装的åŒ?/p>

    sudo apt-get dist-upgrade 升çñ”¾pȝ»Ÿ

    sudo apt-get dselect-upgrade 使用 dselect 升çñ”

    apt-cache depends package 了解使用依赖

    apt-cache rdepends package 是查看该包被哪些包依èµ?/p>

    sudo apt-get build-dep package 安装相关的编译环å¢?/p>

    apt-get source package 下蝲该包的源代码

    sudo apt-get clean && sudo apt-get autoclean 清理无用的包

    sudo apt-get check ‹‚€æŸ¥æ˜¯å¦æœ‰æŸåçš„依èµ?/p>

]]>
Ubuntu 8å…׃ínæ–‡äšghttp://www.aygfsteel.com/lingy/archive/2009/06/13/281957.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Sat, 13 Jun 2009 00:58:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/06/13/281957.html环境åQšä¸»æœºæ“ä½œç³»¾lŸæ˜¯Windows XPåQŒè™šæ‹Ÿæœºæ˜¯Ubuntu 8.10åQŒè™šæ‹Ÿæœºæ˜¯VirtualBox 2.1.0ã€?/p>

    1. 安装增强功能åŒ?Guest Additions)

    安装好Ubuntu 8.10后,˜qè¡ŒUbuntuòq¶ç™»å½•。然后在VirtualBox的菜单里选择"讑֤‡(Devices)" -> "安装增强功能åŒ?Install Guest Additions)"ã€?/p>

    你会发现在Ubuntu桌面上多å‡ÞZ¸€ä¸ªå…‰ç›˜å›¾æ ‡ï¼Œ˜q™å¼ å…‰ç›˜é»˜è®¤è¢«è‡ªåŠ¨åŠ è½½åˆ°äº†æ–‡ä»¶å¤¹/media/cdom0。进入命令行¾lˆç«¯åQŒè¾“入:

    cd /media/cdom0

    sudo ./VboxLinuxAdditions.run

    开始安装工具包。安装完毕后会提½Cø™¦é‡å¯Ubuntuã€?/p>

    2. 讄¡½®å…׃ínæ–‡äšgå¤?/p>

    重启完成后点å‡?讑֤‡(Devices)" -> å…׃ínæ–‡äšgå¤?Shared Folders)菜单åQŒæ·»åŠ ä¸€ä¸ªå…±äº«æ–‡ä»¶å¤¹åQŒé€‰é¡¹å›ºå®šå’ŒäÍ时是指该文äšgå¤ÒŽ˜¯å¦æ˜¯æŒä¹…的。共享名可以ä»Õd–一个自己喜‹Æ¢çš„åQŒæ¯”å¦?gongxiang"åQŒå°½é‡ä‹É用英文名¿U°ã€?/p>

    3. 挂蝲å…׃ínæ–‡äšgå¤?/p>

    重新˜q›å…¥è™šæ‹ŸUbuntuåQŒåœ¨å‘½ä×o行终端下输入åQ?/p>

    sudo mkdir /mnt/shared

    sudo mount -t vboxsf gongxiang /mnt/shared

    其中"gongxiang"是之前创建的å…׃ínæ–‡äšg夹的名字。OKåQŒçŽ°åœ¨Ubuntu和主机可以互传文件了ã€?/p>

    假如您不æƒÏx¯ä¸€‹Æ¡éƒ½æ‰‹åŠ¨æŒ‚è²åQŒå¯ä»¥åœ¨/etc/fstab中添加一™å?/p>

    gongxiang /mnt/shared vboxsf rw,gid=100,uid=1000,auto 0 0

    ˜q™æ ·ž®Þpƒ½å¤Ÿè‡ªåŠ¨æŒ‚è½½äº†ã€?/p>

    4. 卸蝲的话使用下面的命令:

    sudo umount -f /mnt/shared

    注意åQ?/p>

    å…׃ínæ–‡äšg夹的名称千万不要和挂载点的名¿U°ç›¸åŒã€‚比如,上面的挂载点æ˜?mnt/sharedåQŒå¦‚果共享文件夹的名字也是shared的话åQŒåœ¨æŒ‚蝲的时候就会出现如下的错误信息(看http://www.virtualbox.org/ticket/2265)åQ?/p>

    /sbin/mount.vboxsf: mounting failed with the error: Protocol error

    原因分析可以看Tips on running Sun Virtualboxçš„Shared Folder on a Linux Guest节ã€?/p>


 



]]>
VirtualBox¾|‘络配置åQˆNATå’ŒHost InterfaceåQ?/title><link>http://www.aygfsteel.com/lingy/archive/2009/06/13/281951.html</link><dc:creator>æž—å…‰ç‚?/dc:creator><author>æž—å…‰ç‚?/author><pubDate>Fri, 12 Jun 2009 23:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/lingy/archive/2009/06/13/281951.html</guid><description><![CDATA[<p>VirtualBox提供了三¿Uè”¾|‘方式,在这里介¾lå‰ä¸¤ç§æ–¹å¼åQˆNATå’ŒHostInterfaceåQ‰çš„配置æ–ÒŽ³•åQŒç¬¬ä¸‰ç§è”网方式属于利用ä¸ÀLœºä¸Šçš„æ‰€æœ‰çš„虚拟机构å»ÞZ¸€ä¸ªè™šæ‹Ÿç½‘¾lœçš„æ–ÒŽ³•åQŒè¾ƒ½Ž€å•,有兴­‘£çš„可以查看自带的用æˆäh‰‹å†Œã€?/p> <p>½W¬ä¸€¿Uæ–¹å¼NATåQšNATåQˆç½‘¾lœåœ°å€è½¬æ¢åQ‰ï¼Œä½ å¯ä»¥è®¤ä¸ÞZ½ çš„虚拟机是在你的ä¸ÀLœºåŽæ–¹åQŒæ‰€æœ‰çš„联网è¯äh±‚都先通过ä¸ÀLœºåQˆå…¶å®žæ˜¯é€šè¿‡ä¸ÀLœºçš„NAT服务器,˜q™æ˜¯VirtualBox内置的)ã€?/p> <ul> <li>优点åQšé…¾|®ç®€å•,可以说只要你的主机可以上¾|‘那么配¾|®å°±æ²¡æœ‰ä»€ä¹ˆéš¾çš„ã€? <li>¾~ºç‚¹åQšè™šæ‹ŸOS的网¾lœåœ°å€å¤–ç½‘ä¸å¯è§ï¼Œæ— æ³•ä¸Žä½ çš„ä¸»æœø™¿›è¡Œé€šä¿¡åQŒæ‰€ä»¥å¦‚果你要利用主机和你的虚拟OS调试¾|‘络应用½E‹åºåQŒææ€•不能ä‹É用这¿Uè”¾|‘方式ã€?</li> </ul> <p>配置步骤åQ?/p> <p>½W¬ä¸€æ­¥ï¼šæ‰“å¼€VirtualBox的设¾|®çª—å?/p> <p><a target="_blank"><img src="http://static11.photo.sina.com.cn/bmiddle/4b73e76006f99d03acbfa" alt="" /></a></p> <p>½W¬äºŒæ­¥ï¼š˜q›å…¥¾|‘络讄¡½®ç•Œé¢åQŒåƈž®†Attached To 选项选䨓NATåQŒç‚¹å‡È¡®å®?/p> <a target="_blank"></a> <p><a target="_blank"><img src="http://static11.photo.sina.com.cn/bmiddle/4b73e76006f99d19b0f5a" alt="" /></a></p> <p>½W¬ä¸‰æ­¥ï¼šå¯åŠ¨è™šæ‹Ÿæ“ä½œ¾pȝ»ŸåQŒåƈ在该¾pȝ»Ÿä¸­è®¾¾|®è”¾|‘æ–¹å¼äØ“DHCPåQ?**重要åQ‰ï¼Œè‡ªåŠ¨èŽ·å¾—¾|‘络地址åQŒVirtualBox会ä‹Éç”?0.0.0.0˜q™æ ·çš„地址˜q›è¡Œè”网。这样你的虚拟OS上网åQŒæ”¶å‘邮仉™ƒ½æ²¡æœ‰é—®é¢˜ã€‚但是无法和ä¸ÀLœº¾|‘络中的其他PC通信哦ã€?/p> <p> <wbr></p> <p>下面介绍Host Interface的方式进行连æŽ?/p> <p>先关闭你的虚拟操作系¾lŸ^_^</p> <p>½W¬ä¸€æ­¥ï¼šæ‰“开讄¡½®ç•Œé¢åQŒåˆ°¾|‘络选项卡下åQŒåƈ选择Host Interface˜qžæŽ¥æ–¹å¼åQŒå…¶ä»–设¾|®ä¸éœ€è¦æ”¹å?/p> <p><a target="_blank"><img src="http://static16.photo.sina.com.cn/bmiddle/4b73e76045c024478a4bf" alt="" /></a></p> <p> <wbr></p> <p>½W¬äºŒæ­¥ï¼šåœ¨ç½‘¾lœé€‰é¡¹å¡ä¸‹æ–¹çš„Host Interfaces中,新徏一个网¾lœæŽ¥å£ï¼Œç‚¹å‡»åÏx–¹çš„绿色button。这样会在你的主机的¾|‘络˜qžæŽ¥ä¸­å¢žåŠ ä¸€ä¸ªVirtualBox Host Interface 1˜q™æ ·çš„一个本地连接ã€?/p> <p><a target="_blank"><img src="http://static8.photo.sina.com.cn/bmiddle/4b73e76045c024e154eb7" alt="" /></a></p> <p>在主机的¾|‘络˜qžæŽ¥ä¸­ï¼Œæ–°å¾çš„è¿žæŽ¥æ˜¯é»˜è®¤æ–­å¼€çš„ï¼ˆå½“ç„¶å’¯ï¼Œå› äØ“ä½ çš„è™šæ‹Ÿä¸ÀLœº˜q˜æ²¡æœ‰å¯åŠ¨å˜›åQ?/p> <p><a target="_blank"><img src="http://static7.photo.sina.com.cn/bmiddle/4b73e76045c02511b8cb6" alt="" /></a></p> <p>½W¬ä¸‰æ­¥ï¼šå¾ˆé‡è¦çš„一步,我就是卡在这里好久时间才搞明白。VirtualBox需要设¾|®ä¸€ä¸ªç½‘桥,而ä‹É得所虚拟出来的网¾lœæŽ¥å£å¯ä»¥é€šè¿‡ä½ æœ¬æœºçš„¾|‘卡˜q›è¡Œè”网。怎么讄¡½®å‘¢ï¼Ÿ</p> <p>选中上图中的两个本地˜qžæŽ¥åQŒå³é”®ï¼Œé€‰æ‹©æ¡¥æŽ¥ž®±å¯ä»¥å’¯ã€?/p> <p>½W¬å››æ­¥ï¼š˜q›å…¥è™šæ‹Ÿæ“ä½œ¾pȝ»ŸåQŒä¿®æ”¹è”¾|‘æ–¹å¼äØ“é™æ€IP的方式,˜q™æ ·ž®±OKäº?/p> <img src ="http://www.aygfsteel.com/lingy/aggbug/281951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lingy/" target="_blank">æž—å…‰ç‚?/a> 2009-06-13 07:50 <a href="http://www.aygfsteel.com/lingy/archive/2009/06/13/281951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>巧用find解决在目录查扄¡‰¹å®šå­—½W¦ä¸²http://www.aygfsteel.com/lingy/archive/2009/06/04/279944.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Thu, 04 Jun 2009 01:21:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/06/04/279944.html
有时候需要在一ä¸?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C4%BF%C2%BC">目录下的所有文件查扑֐«æœ‰ç‰¹å®šå­—½W¦ä¸²çš„æ–‡ä»Óž¼ŒåŠç‰¹å®šå­—½W¦ä¸²åœ¨æ–‡ä»¶ä¸­çš„定位ã€?br /> 自然反应肯定是ä‹É用grep命ä×oåQŒåŠ ä¸?r参数ã€?br /> grep -r "pattern" .
可是如果待查扄¡š„目录是SVN目录åQŒç„¶åŽï¼Œä¸È›®å½•下面又有N多子目录åQŒå†ç”¨grep可就惨了åQŒä¼šæŸ¥å‡ºå¥½å¤š.svn目录下含有该字符串的文äšgåQŒè€Œè¿™äº›æ–‡ä»¶æ˜¯ 创徏SVN目录时由 tortoiseSVN自动创徏的辅助目录。这些文件我们是不修改的。但是大量这æ ïLš„æ–‡äšg会严重媄响我们的修改速度ã€?br /> grepæœ?-exclude参数åQ?br /> grep -r --exclude=.svn "pattern" .
但是˜q™åªèƒ½æŽ’除掉ä¸È›®å½•下边的.svn目录åQŒå¯¹äºŽå­ç›®å½•里的.svnž®±æ— èƒ½äؓ力了ã€?br />
˜q™æ—¶å€™å°±è¯¥find命ä×o上场了。先说一下find中对我们最有用的参æ•?prune
如果在查找文件时希望忽略某个目录åQŒé‚£ä¹ˆå¯ä»¥ä‹Éç”?prune选项来指出需要忽略的目录ã€?br />
比如要在当前目录下查找不�svn子目录之内的所有文�br /> find . -path "*\.svn" -prune -o -print

-path "*\.svn" -prune -o -print æ˜?-path "*\.svn" -a -prune -o -print 的简写表辑ּã€?br /> 按顺序求å€? -a å’?-o 都是短èµ\求å€û|¼Œä¸?shell çš?&& å’?|| ¾cÖM¼¼ã€?br /> 如果 -path "*\.svn" 为真åQŒåˆ™æ±‚å€?-prune , -prune ˜q”å›žçœŸï¼Œä¸Žé€»è¾‘è¡¨è¾¾å¼äØ“çœŸï¼›å¦åˆ™ä¸æ±‚å€?-pruneåQŒä¸Žé€»è¾‘è¡¨è¾¾å¼äØ“å‡ã€?br /> 如果 -path "*\.svn" -a -prune 为假åQŒåˆ™æ±‚å€?-print åQ?print˜q”å›žçœŸï¼Œæˆ–é€»è¾‘è¡¨è¾¾å¼äØ“çœŸï¼›å¦åˆ™ä¸æ±‚å€?-printåQŒæˆ–é€»è¾‘è¡¨è¾¾å¼äØ“çœŸã€?br /> ˜q™ä¸ªè¡¨è¾¾å¼ç»„åˆç‰¹ä¾‹å¯ä»¥ç”¨ä¼ªç å†™äØ“
if -path "*\.svn" then
-prune
else
-print
如果需要避开多个文äšgå¤?可以使用下面的命ä»?
find . \( -path dir1 -o -path file1 \) -prune -o -print
圆括可‚¡¨½Cø™¡¨è¾‘Ö¼çš„结合ã€?br /> \ 表示引用åQŒå³æŒ‡ç¤º shell 不对后面的字½W¦ä½œç‰ÒŽ®Šè§£é‡ŠåQŒè€Œç•™¾l?find 命ä×o去解释其意义ã€?br /> 查找某一¼‹®å®šæ–‡äšgåQ?name½{‰é€‰é¡¹åŠ åœ¨-o 之后
#find . \(-path dir1 -o -path file1 \) -prune -o -name "temp" -print

排除目录已经做到äº? 下一步就是用grepåŽ?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CB%D1%CB%F7">搜烦特定串了.¾l“合xargs使用卛_¯.
find . -path "*\.svn" -prune -o -print|xargs grep "CodeType" -n


]]>
Linux字符集的修改æ–ÒŽ³• http://www.aygfsteel.com/lingy/archive/2009/06/02/279603.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Tue, 02 Jun 2009 07:00:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/06/02/279603.html

用export LANG=zh_CN.UTF-8˜q™æ ·åªä¸‹‹Æ¡é‡èµ·åˆè¦é‡è®„¡½®

修改 /etc/sysconfig/i18n æ–‡äšgåQŒå¦‚

LANG="en_US"åQŒxwindow会显½Cø™‹±æ–‡ç•Œé¢ï¼Œ

LANG="zh_CN.GB18030"åQŒxwindow会显½CÞZ¸­æ–‡ç•Œé¢ã€?/p>

¾~–辑/etc/sysconfig/i18n˜q™ä¸ªæ–‡äšgåQ?br /> LANG="zh_CN.GB18030"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

保存,重è“v.OKäº?br /> æ³?
I18N æ˜?internationalization 的羃写åŞ式,意即åœ?i å’?n 之间æœ?18 个字母,本意是指软äšgçš?#8220;国际åŒ?#8221;.
I18N支持多种语言åQŒä½†æ˜¯åŒä¸€æ—‰™—´åªèƒ½æ˜¯è‹±æ–‡å’Œä¸€¿Ué€‰å®šçš„语­a€åQŒä¾‹å¦‚英æ–?中文、英æ–?å¾äh–‡ã€è‹±æ–?韩文½{‰ç­‰åQ?br /> 原来çš?
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"



]]>
Linux中批量把文äšg名大写改成小å†?/title><link>http://www.aygfsteel.com/lingy/archive/2009/06/01/279434.html</link><dc:creator>æž—å…‰ç‚?/dc:creator><author>æž—å…‰ç‚?/author><pubDate>Mon, 01 Jun 2009 09:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/lingy/archive/2009/06/01/279434.html</guid><description><![CDATA[for fname in *; do mv $fname `echo $fname|tr [A-Z] [a-z]`; done<br /> 变换后如果有相同的文件名会被覆盖掉的åQŒå¯ä»¥åŠ ä¸ªå‚æ•?br /> <br /> for each in *; do mv <font color="red">-i</font> $each `echo $each|tr A-Z a-z`;done <br /> <br />  cat zeus-schema.sql|tr [A-Z] [a-z] >zeus-schema1.sql <img src ="http://www.aygfsteel.com/lingy/aggbug/279434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lingy/" target="_blank">æž—å…‰ç‚?/a> 2009-06-01 17:26 <a href="http://www.aygfsteel.com/lingy/archive/2009/06/01/279434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux中locate 命ä×oçš„ä‹Éç”?/title><link>http://www.aygfsteel.com/lingy/archive/2009/05/28/278323.html</link><dc:creator>æž—å…‰ç‚?/dc:creator><author>æž—å…‰ç‚?/author><pubDate>Thu, 28 May 2009 06:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/lingy/archive/2009/05/28/278323.html</guid><description><![CDATA[<div class="wmqeeuq" id="content"> <p>名称åQšlocate</p> <p>使用权限åQšæ‰€æœ‰ä‹É用è€?/p> <p>使用方式åQ?/p> <p>locate [-q] [-d ] [--database=]</p> <p>  locate [-r ] [--regexp=]</p> <p>  locate [-qv] [-o ] [--output=]</p> <p>  locate [-e ] [-f ] <[-l ] [-c]<!--iwms_ad_begin--> <table width="97%" align="center" border="0"> <tbody> <tr> <td colspan="3"> <div align="center"><script language="javaScript" src="../../system/system60.js" type="text/javascript"></script><script type="text/javascript"><!-- google_ad_client="pub-5195587195407606" ; /* Linuxidc 468x60, åK½ï¿½åK½ï¿½åK½ï¿½ 08-8-31 */ google_ad_slot="9963827011" ; google_ad_width="468; google_ad_height" = 60; //--> </script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script><script>window.google_render_ad();</script><ins style="padding-right: 0px; padding-left: 0px; visibility: visible; padding-bottom: 0px; margin: 0px; width: 468px; border-top-style: none; padding-top: 0px; border-right-style: none; border-left-style: none; position: relative; height: 60px; border-bottom-style: none"><ins style="padding-right: 0px; display: block; padding-left: 0px; visibility: visible; padding-bottom: 0px; margin: 0px; width: 468px; border-top-style: none; padding-top: 0px; border-right-style: none; border-left-style: none; position: relative; height: 60px; border-bottom-style: none"><iframe id="google_ads_frame3" style="left: 0px; position: absolute; top: 0px" name="google_ads_frame" marginwidth="0" marginheight="0" src="http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-5195587195407606&dt=1243491604640&lmt=1240449717&prev_slotnames=4448053148%2C0155470610&output=html&slotname=9963827011&correlator=1243491604453&url=http%3A%2F%2Fwww.linuxidc.com%2FLinux%2F2007-11%2F9113.htm&ref=http%3A%2F%2Fwww.google.cn%2Fsearch%3Fhl%3Dzh-CN%26q%3Dlinux%2Blocate%25E5%2591%25BD%25E4%25BB%25A4%26meta%3D%26aq%3D0%26oq%3Dlinux%2Blocate&frm=0&ga_vid=976550028.1243491604&ga_sid=1243491604&ga_hid=1133516476&flash=9.0.115.0&w=468&h=60&u_h=800&u_w=1280&u_ah=774&u_aw=1280&u_cd=32&u_tz=480&u_java=true&dtd=16&xpc=VbySMiPH9e&p=http%3A//www.linuxidc.com" frameborder="0" width="468" scrolling="no" height="60" allowTransparency></iframe></ins></ins></div> </td> </tr> </tbody> </table> <!--iwms_ad_end--></p> <p>  <[-U ] [-u]></p> <p>  locate [-Vh] [--version] [--help]</p> <p>  说明åQ?/p> <p><clk style="font-size: 14px; line-height: 15pt">locate 让ä‹É用者可以很快速的搜寻档案¾pȝ»Ÿå†…是否有指定的档案。其<nobr oncontextmenu="return false" onmousemove="$cE.MoW()" id="clickeyekey1" onmouseover="$cE.s(event,1)" style="font-size: 14px; color: #6600ff; line-height: 15pt; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick='$cE.c(event,1,"",1)' onmouseout="$cE.OuK()">æ–ÒŽ³•</nobr>是先建立一个包括系¾lŸå†…所有档案名¿U°åŠè·¯å¾„的数据库åQŒä¹‹åŽå½“å¯ÀL‰¾æ—¶å°±åªéœ€æŸ¥è¯¢˜q™ä¸ªæ•°æ®åº“,而不必实际深入档案系¾lŸä¹‹ä¸­äº†ã€?/clk></p> <p>  在一般的 distribution 之中åQŒæ•°æ®åº“的徏立都被放åœ?contab 中自动执行。一般ä‹É用者在使用时只要用</p> <p> # locate your_file_name的型式就可以了ã€?参数åQ?/p> <p>-u</p> <p>-U</p> <p>建立数据库,-u 会由根目录开始,-U 则可以指定开始的位置ã€?/p> <p>  -e</p> <p>  ž®?/p> <p>  排除在寻扄¡š„范围之外ã€?/p> <p>  -l</p> <p><clk style="font-size: 14px; line-height: 15pt">  如果 æ˜?1åQŽåˆ™å¯åŠ¨å®‰å…¨æ¨¡å¼ã€‚åœ¨å®‰å…¨æ¨¡å¼ä¸‹ï¼Œä½¿ç”¨è€…ä¸ä¼šçœ‹åˆ?nobr oncontextmenu="return false" onmousemove="$cE.MoW()" id="clickeyekey0" onmouseover="$cE.s(event,0)" style="font-size: 14px; color: #6600ff; line-height: 15pt; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick='$cE.c(event,0,"",1)' onmouseout="$cE.OuK()">权限</nobr>无法看到的档案。这会始速度减慢åQŒå› ä¸?locate 必须臛_®žé™…的档案¾pȝ»Ÿä¸­å–得档案的权限资料ã€?/clk></p> <p>  -f</p> <p>  ž®†ç‰¹å®šçš„æ¡£æ¡ˆ¾pȝ»ŸæŽ’除在外åQŒä¾‹å¦‚我们没有到理要æŠ?proc 档案¾pȝ»Ÿä¸­çš„æ¡£æ¡ˆæ”‘Öœ¨æ•°æ®åº“中ã€?/p> <p>  -q</p> <p>  安静模式åQŒä¸ä¼šæ˜¾½CÞZ“Q何错误讯息ã€?/p> <p>  -n</p> <p>  臛_¤šæ˜„¡¤º 个输出ã€?/p> <p>  -r</p> <p>  使用正规˜qç®—å¼?做寻扄¡š„条äšgã€?/p> <p>  -o</p> <p>  指定数据库存的名¿U°ã€?/p> <p>  -d</p> <p>  指定数据库的路径</p> <p>  -h</p> <p>  昄¡¤ºè¾…助讯息</p> <p>  -v</p> <p>  昄¡¤ºæ›´å¤šçš„讯æ?/p> <p>  -V</p> <p><clk style="font-size: 14px; line-height: 15pt">  昄¡¤º<nobr oncontextmenu="return false" onmousemove="$cE.MoW()" id="clickeyekey3" onmouseover="$cE.s(event,3)" style="font-size: 14px; color: #6600ff; line-height: 15pt; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick='$cE.c(event,3,"",1)' onmouseout="$cE.OuK()">½E‹åº</nobr>的版本讯æ?范例åQ?/clk></p> <p>  locate chdrv : å¯ÀL‰¾æ‰€æœ‰å« chdrv 的档æ¡?/p> <p>  locate -n 100 a.out : å¯ÀL‰¾æ‰€æœ‰å« a.out 的档案,但最多只昄¡¤º 100 ä¸?/p> <p>  locate -u : 建立数据åº?/p> </div>  locate命ä×o可以在搜å¯ÀL•°æ®åº“时快速找到档案,数据库由updatedb½E‹åºæ¥æ›´æ–ŽÍ¼Œupdatedb是由cron daemon周期性徏立的åQŒlocate命ä×o在搜å¯ÀL•°æ®åº“时比由整个由¼‹¬ç›˜èµ„料来搜寻资料来得快åQŒä½†è¾ƒå·®åŠ²çš„æ˜¯locate所扑ֈ°çš„æ¡£æ¡ˆè‹¥æ˜¯æœ€˜q‘才建立或刚更名的,可能会找不到åQŒåœ¨å†…定å€ég¸­åQŒupdatedb每天会跑一‹Æ¡ï¼Œå¯ä»¥ç”׃¿®æ”¹crontab来更新设定倹{€?etc/crontab)<!--iwms_ad_begin--> <table width="97%" align="center" border="0"> <tbody> <tr> <td colspan="3"> <div align="center"><script language="javaScript" src="../../system/system60.js" type="text/javascript"></script><script type="text/javascript"><!-- google_ad_client="pub-5195587195407606" ; /* Linuxidc 468x60, åK½ï¿½åK½ï¿½åK½ï¿½ 08-8-31 */ google_ad_slot="9963827011" ; google_ad_width="468; google_ad_height" = 60; //--> </script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script><script>window.google_render_ad();</script><ins style="padding-right: 0px; padding-left: 0px; visibility: visible; padding-bottom: 0px; margin: 0px; width: 468px; border-top-style: none; padding-top: 0px; border-right-style: none; border-left-style: none; position: relative; height: 60px; border-bottom-style: none"><ins style="padding-right: 0px; display: block; padding-left: 0px; visibility: visible; padding-bottom: 0px; margin: 0px; width: 468px; border-top-style: none; padding-top: 0px; border-right-style: none; border-left-style: none; position: relative; height: 60px; border-bottom-style: none"><iframe id="google_ads_frame3" style="left: 0px; position: absolute; top: 0px" name="google_ads_frame" marginwidth="0" marginheight="0" src="http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-5195587195407606&dt=1243491713265&lmt=1240449717&prev_slotnames=4448053148%2C0155470610&output=html&slotname=9963827011&correlator=1243491713109&url=http%3A%2F%2Fwww.linuxidc.com%2FLinux%2F2007-11%2F9113p2.htm&ref=http%3A%2F%2Fwww.linuxidc.com%2FLinux%2F2007-11%2F9113.htm&frm=0&ga_vid=186602105.1243491713&ga_sid=1243491713&ga_hid=1708668547&flash=9.0.115.0&w=468&h=60&u_h=800&u_w=1280&u_ah=774&u_aw=1280&u_cd=32&u_tz=480&u_his=1&u_java=true&dtd=0&xpc=WtokoQXoK6&p=http%3A//www.linuxidc.com" frameborder="0" width="468" scrolling="no" height="60" allowTransparency></iframe></ins></ins></div> </td> </tr> </tbody> </table> <!--iwms_ad_end--> <p>  locate指定用在搜寻½W¦åˆæ¡äšg的档案,它会åŽÕd‚¨å­˜æ¡£æ¡ˆä¸Žç›®å½•名称的数据库内,å¯ÀL‰¾åˆä¹ŽèŒƒæœ¬æ ·å¼æ¡äšg的档案或目录录,可以使用ç‰ÒŽ®Šå­—å…ƒåQˆå¦‚”*”æˆ?#8221;?”½{‰ï¼‰æ¥æŒ‡å®šèŒƒæœ¬æ ·å¼ï¼Œå¦‚æŒ‡å®šèŒƒæœ¬äØ“kcpa*ner, locate会找出所有è“v始字䏲䨓kcpa且结ž®¾äØ“ner的档案或目录åQŒå¦‚名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括子目录在内的所有档案ã€?/p> <p>  locate指ä×oå’Œfind扑֯»æ¡£æ¡ˆçš„功能类ä¼û|¼Œä½†locate是透过update½E‹åºž®†ç¡¬ç›˜ä¸­çš„æ‰€æœ‰æ¡£æ¡ˆå’Œç›®å½•资料先徏立一个烦引数据库åQŒåœ¨æ‰§è¡Œloacte时直接找该烦引,查询速度会较快,索引数据库一般是由操作系¾lŸç®¡ç†ï¼Œä½†ä¹Ÿå¯ä»¥ç›´æŽ¥ä¸‹è¾¾updateå¼ø™¿«¾pȝ»Ÿç«‹å³ä¿®æ”¹ç´¢å¼•数据库ã€?/p> <p>  不过½W¬ä¸€‹Æ¡åœ¨æ‰§è¡Œupdate後再使用locateå¯ÀL‰¾æ¡£æ¡ˆå¸æ€¼šå¤ÞpÓ|åQŒæ­¤æ—¶å°±è¦æ‰§è¡Œslocate ˉu该命令(也可执行updatedb指ä×oåQŒå…¶æ•ˆæžœç›¸åŒåQ‰æ¥æ›´æ–°slocate数据库,该命令会åœ?usr/sbin下äñ”生slocate执行档,再由locate到此数据库寻找所要找的资料ã€?/p> <p>locateåQšè¯¥å‘½ä×o在运行时需要后台烦引的数据库作为支撑,åœ?<a title="Ubuntu" >Ubuntu</a> 中这个数据库文äšg位于 /var/cache/locate/locatedb。一般来è¯ß_¼Œ˜q™ä¸ªæ•°æ®åº“文件每天是通过 cron 自动更新的。如果不òq¸æ²¡æœ‰å¾—到更斎ͼŒé‚£ä¹ˆå¯ä»¥æ‰§è¡Œ sudo updatedb 来手动更新ã€?/p> <p>假如我想要在¾pȝ»Ÿä¸­æŸ¥æ‰¾ä¸€ä¸ªåä¸?linux.html 的文ä»Óž¼Œé‚£ä¹ˆå¯ä»¥˜q™æ ·æ‰§è¡Œå‘½ä×oåQšlocate linux.html。locate 搜烦文äšg的速度很快åQŒä¸€ä¼šå„¿ž®×ƒ¼šæŠŠç»“果列出来。locate 有一个十分有用的选项 -råQŒå®ƒå¯ä»¥è®©ä½ åœ¨æœç´¢æ–‡ä»¶æ—¶ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼ã€?/p> <img src ="http://www.aygfsteel.com/lingy/aggbug/278323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lingy/" target="_blank">æž—å…‰ç‚?/a> 2009-05-28 14:22 <a href="http://www.aygfsteel.com/lingy/archive/2009/05/28/278323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VirtualBox 在XP下虚拟Ubuntu时不能全屏的问题解决æ–ÒŽ³•http://www.aygfsteel.com/lingy/archive/2009/05/28/278310.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Thu, 28 May 2009 02:56:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/05/28/278310.htmlVirtualBox 在XP下虚拟Ubuntu时不能全屏的问题解决æ–ÒŽ³•http://www.diybl.com/ 2008-6-14  ¾|‘络 点击:  [ 评论 ]
文章搜烦åQ?nbsp;    【点å‡ÀL‰“包该文章ã€?被过滤广å‘?
【本站开通在¾U¿QQ讨论¾Ÿ¤ã€?

VirtualBox 在XP下虚拟Ubuntu时不能完全全屏的问题解决æ–ÒŽ³•

本ähLCD 1280×800 Virtualbox 在深度XPä¸?虚拟 Ubuntu 8.04
声音、网¾lœä¸€åˆ‡æ­£å¸¸ï¼Œž®±æ˜¯æœ‰ä¸èƒ½å®Œå…¨å…¨å±çš„问题åQŒubuntuä½œäØ“å®¢æœºçš„åˆ†è¾¨çŽ‡
只能调到800×600,¾lè¿‡ä¸€ç•ªæ£€ç´?摸烦åQŒæžå®šï¼ŒçŽ°æ•´ç†å¦‚ä¸‹ï¼š

1.安装VboxLinuxadditions
aåQ‰å®‰è£…make gcc lib½{?/p>

-------------------------------
apt-get install build-essential
-------------------------------


båQ‰å®‰è£…module-assistant

---------------------------------
apt-get install module-assistant
---------------------------------


cåQ‰è¿è¡?/p>

-------------
m-a prepare
--------------

dåQ‰å®‰è£…VboxLinuxadditions(é€?#8220;讑֤‡”-“安装虚拟电脑工具åŒ?#8221;)
˜q›å…¥ç›®å½•后运è¡?/p>

---------------------------------
sudo ./VBoxLinuxAdditions.run
---------------------------------

2.修改VBOX在Ubuntu里的讄¡½®

˜qè¡Œ
--------------------------------
sudo gedit /etc/X11/xorg.conf
--------------------------------
后如下把部分修改

------------------------

Section "Device"
Identifier "Configured Video Device"
Driver "vboxvideo"
EndSection

Section "Monitor"
Identifier "Configured Monitor"
EndSection

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
DefaultDepth 24 #我这里颜色质量只能开�4
SubSection "Display"
Modes "1280x800" "800x600" #按屏òq•需要改ž®±å¯ä»¥äº†
EndSubSection
EndSection

-------------------------------
3.重启UbuntuåQŒç„¶åŽåˆ†è¾¨çއž®±å¯ä»¥è®¾¾|®æˆ1280×800äº?/p>

æŒ?右ctrl+F" ˜q›å…¥å…¨å±åQšæ— ¾~æ¨¡å¼?å…׃ín剪脓板,linuxå’Œwin的和òq›_…±å­˜ï¼Œ
VBox的网¾lœè®¾¾|®æˆNATåQŒguestå…׃ínhost的网¾lœï¼Œ˜q™æ ·åº”该ž®±å¯ä»¥åœ¨æ¶å¿ƒçš„æ ¡å›­ç½‘玩上linux了~


文章出处åQšhttp://www.diybl.com/course/6_system/linux/Linuxjs/2008614/125481.html



]]>
linux sed 扚w‡æ›¿æ¢å­—符ä¸?/title><link>http://www.aygfsteel.com/lingy/archive/2009/05/28/278296.html</link><dc:creator>æž—å…‰ç‚?/dc:creator><author>æž—å…‰ç‚?/author><pubDate>Wed, 27 May 2009 16:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/lingy/archive/2009/05/28/278296.html</guid><description><![CDATA[比如åQŒè¦ž®†ç›®å½?modules下面所æœ?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CE%C4%BC%FE">æ–‡äšg</span>中的zhangsan都修æ”ÒŽˆlisiåQŒè¿™æ ·åšåQ?br /> <br /> <span id="wmqeeuq" class="t_tag" onclick="tagshow(event)" href="tag.php?name=sed">sed</span> -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`<br /> <br /> 解释一下:<br /> <br /> <font color="#ff0000">-i 表示inplace editåQŒå°±åœîC¿®æ”ÒŽ–‡ä»?br /> -r 表示搜烦子目å½?br /> -l 表示输出匚w…çš„æ–‡ä»¶å</font><br /> <br /> ˜q™ä¸ª<span id="wmqeeuq" class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C3%FC%C1%EE">命ä×o</span>¾l„合很强大,要注意备份文件ã€?br /> <font face="Verdana "><font size="2"><br /> </font></font><br /> <font face="Verdana "><font size="2">åQ?åQ‰sed 'y/1234567890/ABCDEFGHIJ/' test_sed</font></font><br /> <font face="Verdana "><font size="2">sed 'y/1234567890/ABCDEFGHIJ/' filename<br /> ABCDEFGHIJ<br /> BCDEFGHIJA<br /> CDEFGHIJAB<br /> DEFGHIJABC<br /> 注意变换关系是按两个list的位¾|®å¯¹åº”变æ?/font></font><br /> <font face="Verdana "><font size="2"><font color="#ff0000">其中åQštest_sed的内å®ÒŽ˜¯åQ?/font></font></font><br /> <font color="#ff0000">1234567890<br /> 2345678901<br /> 3456789012<br /> 4567890123</font><br /> <font color="#ff0000"><br /> (2)</font><font face="Verdana "><font size="2"><font color="#ff0000">替换每行所有匹é…?/font></font></font><br /> <font color="#ff0000">sed 's/01/Ab/g' test_sed<br /> 1234567890<br /> 23456789Ab<br /> 3456789Ab2<br /> 456789Ab23</font><br /> <font color="#ff0000">注意åQšç¬¬ä¸€è¡Œçš„0åQ?没有分别替换为A,b</font><br /> <img src ="http://www.aygfsteel.com/lingy/aggbug/278296.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lingy/" target="_blank">æž—å…‰ç‚?/a> 2009-05-28 00:40 <a href="http://www.aygfsteel.com/lingy/archive/2009/05/28/278296.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ä»ÕdŠ¡½Ž¡ç†http://www.aygfsteel.com/lingy/archive/2009/05/28/278293.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Wed, 27 May 2009 16:24:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/05/28/278293.html bg
fg
&
nohup

]]>
Linux不常用命令之一 —�awkhttp://www.aygfsteel.com/lingy/archive/2009/05/27/278272.html林光�/dc:creator>林光�/author>Wed, 27 May 2009 14:47:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/05/27/278272.html#awk  -F:  '模式    {动作}'  file
1)$ awk  '/yaoshuyin/ {print $3,$2;  print $4,$5}'  emp_names.txt
2)$ awk '/yaoshuyin | cnscn/ {print $3,$2} {print $4,$5}'  emp_names.txt
3)$ awk '$5  ˜  /yaoshuyin | tom/'  emp_names.txt

4)# awk '$0  ~  /DBNAME/  { print $0}'   800hr_db.inc.php   
$DB_DBNAME  ="800hr_db";

5)#awk '$0  !~  /DBNAME/  { print $0}' 800hr_db.inc.php
<?
   $DB_HOSTNAME="10.10.10.206";
   $DB_USERNAME="800hr";
   $DB_PASSWORD="800hr_buildhr_best";
?>


6)#awk  '{FS=":"}  {print $2}'   emp_names.txt

   #awk -F:  '{print $2}'  emp_names.txt



#awk  -F:  -f  awk.prog   file

模式     是一个正规表辑ּæˆ–ç”±!、||ã€?amp;&、或由圆括号分组的几个正规表辑ּã€?正规式必™åȝ”±/ ... /括è“v
            /hello/  {print $2, $1}   或 �br />            /hello/ || /none/  {print $1, $2}  或 �br />            !/hello/ {print $1, $2}  �
            /^[Hh1]/ {print $1, $2}
            /hello/ {
                         print $2
                         print $1
            }

================================================================
#awk函数
length($2)

BEGIN    {
                   print  "Beginning to process  the input data..."
                   for(s=2;s<6;++s)
                   {
                        if(s==4)  continue;
                        print  "s is now",s
                    }
                    printf   "this is a number %d and a string %s\n",333,"333"
             }

            {
                   s +=$2
                   print  $2, "length=" length($2), "s =" s
            }

END      {
                   print "End of the process..."
            }


%c  (character)
%d  (decimal)
%o  (octal)
%x  (hexadecimal)
%f  (float)
printf  "one=>%1d<,two=>%2.3f<,three=>%-3d<\n",sss,sss,sss     # -表示左对�/font>


====================================================
awk语句
{
         if(s>2  && s<20 || s==10)
         {
                ++s
                print s
          }

          while(s<10)
          {
                s=$1/32.3
                ++m
           }

           for(s=0;s<10;++s)
           {
                  s=$1/32.3
                 ++m
            }

}

====================================================


$ df -k | awk '{print $1}'| grep -v "Filesystem"
æ–‡äšg¾pȝ»Ÿ
/dev/sda2
/dev/sda1
none



$ df -k | awk '{print $1}'| grep -v "Filesystem" | sed s'/\/dev\///g'
æ–‡äšg¾pȝ»Ÿ
sda2
sda1
none

#awk  -f   prog  filename_list

=========================================================
-F字段分隔½W?/b>
$0              代表整行
$1              ½W¬ä¸€ä¸ªå­—ŒD?/b>
{print  $2, $1}                 输出时以åQŒäؓ字段分隔½W?/font>

在我们ä‹É用Linuxæ—Óž¼Œä¸€äº›å¸¸ç”¨çš„命ä×oåQŒæ¯”如ls、date、pwd½{‰ï¼ˆä¸ä¸€ä¸€ä¾‹ä‹D了)不太å®ÒŽ˜“忘记åQŒä½†æ˜¯å¯¹äºŽä¸€äº›ä¸å¤ªå¸¸ç”¨çš„命ä×o而言åQŒä¸å…‰å…‰æ˜¯å‚敎ͼŒž®Þp¿žå‘½ä×o都会忘记åQˆå°å¼Ÿæ˜¯åšå¼€å‘工作的åQŒæ‰€ä»¥æ¯”较容易忘è®?DåQ?/p>

让我们ç‘ô¾l­ï¼Œå¼€å§‹ä‹Éç”?awkåQŒä»¥äº†è§£å…¶å·¥ä½œåŽŸç†ã€‚åœ¨å‘½ä×o行中输入以下命ä×oåQ?/p>

$ awk '{ print }' /etc/passwd
 
您将会见åˆ?/etc/passwd æ–‡äšg的内容出现在眼前。现在,解释 awk 做了些什么。调ç”?awk æ—Óž¼Œæˆ‘们指定 /etc/passwd ä½œäØ“è¾“å…¥æ–‡äšg。执è¡?awk æ—Óž¼Œå®ƒä¾‹Æ¡å¯¹ /etc/passwd 中的每一行执è¡?print 命ä×o。所有输出都发送到 stdoutåQŒæ‰€å¾—到的结果与与执行catting /etc/passwd完全相同ã€?/p>

现在åQŒè§£é‡?{ print } 代码块。在 awk 中,花括åïL”¨äºŽå°†å‡ å—代码¾l„合åˆîC¸€èµøP¼Œ˜q™ä¸€ç‚¹ç±»ä¼égºŽ C 语言。在代码块中只有一æ?print 命ä×o。在 awk 中,如果只出çŽ?print 命ä×oåQŒé‚£ä¹ˆå°†æ‰“印当前行的全部内容ã€?/p>

˜q™é‡Œæ˜¯å¦ä¸€ä¸?awk ½CÞZ¾‹åQŒå®ƒçš„作用与上例完全相同åQ?/p>

$ awk '{ print $0 }' /etc/passwd
 


åœ?awk 中, $0 变量表示整个当前行,所ä»?print å’?print $0 的作用完全一栗÷€?/p>

如果您愿意,可以创徏一ä¸?awk ½E‹åºåQŒè®©å®ƒè¾“å‡ÞZ¸Žè¾“入数据完全无关的数据。以下是一个示例:

$ awk '{ print "" }' /etc/passwd
 


只要ž®?"" 字符串传递给 print 命ä×oåQŒå®ƒž®×ƒ¼šæ‰“印½Iºç™½è¡Œã€‚如æž?a onclick="javascript:tagshow(event, '%B2%E2%CA%D4');" href="javascript:;" target="_self">‹¹‹è¯•该脚本,ž®†ä¼šå‘现对于 /etc/passwd æ–‡äšg中的每一行,awk 都输å‡ÞZ¸€ä¸ªç©ºç™½è¡Œã€‚再‹Æ¡è¯´æ˜Žï¼Œ awk 对输入文件中的每一行都执行˜q™ä¸ªè„šæœ¬ã€‚ä»¥ä¸‹æ˜¯å¦ä¸€ä¸ªç¤ºä¾‹ï¼š

$ awk '{ print "hiya" }' /etc/passwd
 


˜qè¡Œ˜q™ä¸ªè„šæœ¬ž®†åœ¨æ‚¨çš„屏幕上写æ»?hiyaã€?)

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

多个字段

awk 非常善于处理分成多个逻辑字段的文本,而且让您可以毫不费力地引ç”?awk 脚本中每个独立的字段。以下脚本将打印出您的系¾lŸä¸Šæ‰€æœ‰ç”¨æˆ·å¸æˆïLš„列表åQ?/p>

$ awk -F":" '{ print $1 }' /etc/passwd
 


上例中,在调ç”?awk æ—Óž¼Œä½¿ç”¨ -F 选项来指å®?":" ä½œäØ“å­—æ®µåˆ†éš”½W¦ã€‚awk 处理 print $1 命ä×oæ—Óž¼Œå®ƒä¼šæ‰“印出在输入文äšg中每一行中出现的第一个字ŒDüc€‚以下是另一个示例:


$ awk -F":" '{ print $1 $3 }' /etc/passwd
 


以下是该脚本输出的摘录:

halt7
operator11
root0
shutdown6
sync5
bin1
....etc.
 


如您所见,awk 打印å‡?/etc/passwd æ–‡äšg的第一和第三个字段åQŒå®ƒä»¬æ­£å¥½åˆ†åˆ«æ˜¯ç”¨æˆ·åå’Œç”¨æˆ·æ ‡è¯†å­—段。现在,当脚本运行时åQŒå®ƒòq¶ä¸ç†æƒ³ -- 在两个输出字ŒDµä¹‹é—´æ²¡æœ‰ç©ºæ û|¼å¦‚果习惯于ä‹Éç”?bash æˆ?python ˜q›è¡Œ¾~–程åQŒé‚£ä¹ˆæ‚¨ä¼šæŒ‡æœ?print $1 $3 命ä×o在两个字ŒDµä¹‹é—´æ’入空根{€‚然而,当两个字½W¦ä¸²åœ?awk ½E‹åºä¸­å½¼æ­¤ç›¸é‚ÀL—¶åQŒawk 会连接它们但不在它们之间æ·ÕdŠ ½Iºæ ¼ã€‚以下命令会在这两个字段中插入空æ û|¼š


$ awk -F":" '{ print $1 " " $3 }' /etc/passwd
 


以这¿Uæ–¹å¼è°ƒç”?print æ—Óž¼Œå®ƒå°†˜qžæŽ¥ $1 ã€? " å’?$3 åQŒåˆ›å»ºå¯è¯Èš„输出。当ç„Óž¼Œå¦‚果需要的话,我们˜q˜å¯ä»¥æ’入一些文本标½{¾ï¼š


$ awk -F":" '{ print "username: " $1 "\t\tuid:" $3" }' /etc/passwd
 


˜q™å°†äº§ç”Ÿä»¥ä¸‹è¾“出åQ?/p>

username: halt          uid:7
username: operator      uid:11
username: root          uid:0
username: shutdown      uid:6
username: sync          uid:5
username: bin           uid:1
....etc.
 

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

外部脚本

ž®†è„šæœ¬ä½œä¸ºå‘½ä»¤è¡Œè‡ªå˜é‡ä¼ é€’ç»™ awk 对于ž®çš„单行½E‹åºæ¥è¯´æ˜¯éžå¸¸ç®€å•çš„åQŒè€Œå¯¹äºŽå¤šè¡Œç¨‹åºï¼Œå®ƒå°±æ¯”较复杂。您肯定惌™¦åœ¨å¤–部文件中撰写脚本。然后可以向 awk ä¼ é€?-f 选项åQŒä»¥å‘它提供此脚本文ä»Óž¼š

$ awk -f myscript.awk myfile.in
 


ž®†è„šæœ¬æ”¾å…¥æ–‡æœ¬æ–‡ä»¶è¿˜å¯ä»¥è®©æ‚¨ä½¿ç”¨é™„åŠ  awk 功能。例如,˜q™ä¸ªå¤šè¡Œè„šæœ¬ä¸Žå‰é¢çš„å•è¡Œè„šæœ¬çš„ä½œç”¨ç›¸åŒï¼Œå®ƒä»¬éƒ½æ‰“å°å‡º /etc/passwd 中每一行的½W¬ä¸€ä¸ªå­—ŒDµï¼š

BEGIN {
    FS=":"
}
{ print $1 }
 


˜q™ä¸¤ä¸ªæ–¹æ³•的差别在于如何讄¡½®å­—段分隔½W¦ã€‚在˜q™ä¸ªè„šæœ¬ä¸­ï¼Œå­—æ®µåˆ†éš”½W¦åœ¨ä»£ç è‡ªèín中指定(通过讄¡½® FS 变量åQ‰ï¼Œè€Œåœ¨å‰ä¸€ä¸ªç¤ºä¾‹ä¸­åQŒé€šè¿‡åœ¨å‘½ä»¤è¡Œä¸Šå‘ awk ä¼ é€?-F":" 选项来设¾|?FS。通常åQŒæœ€å¥½åœ¨è„šæœ¬è‡ªèín中设¾|®å­—ŒDµåˆ†éš”符åQŒåªæ˜¯å› ä¸ø™¿™è¡¨ç¤ºæ‚¨å¯ä»¥å°‘输入一个命令行自变量。我们将在本文的后面详细讨论 FS 变量ã€?/p>

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

BEGIN �END �/p>

通常åQŒå¯¹äºŽæ¯ä¸ªè¾“入行åQŒawk 都会执行每个脚本代码块一‹Æ¡ã€‚然而,在许多编½E‹æƒ…况中åQŒå¯èƒ½éœ€è¦åœ¨ awk 开始处理输入文件中的文本之 å‰?执行初始化代码。对于这¿Uæƒ…况,awk 允许您定义一ä¸?BEGIN 块。我们在前一个示例中使用äº?BEGIN 块。因ä¸?awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始åŒ?FSåQˆå­—ŒDµåˆ†éš”符åQ‰å˜é‡ã€æ‰“印页眉或初始化其它在½E‹åºä¸­ä»¥åŽä¼šå¼•用的全局变量的极佳位¾|®ã€?/p>

awk ˜q˜æä¾›äº†å¦ä¸€ä¸ªç‰¹ŒDŠå—åQŒå«ä½?END 块。awk 在处理了输入文äšg中的所有行之后执行˜q™ä¸ªå—。通常åQŒEND 块用于执行最¾lˆè®¡½Ž—或打印应该出现在输出流¾l“尾的摘要信息ã€?/p>

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

规则表达式和�/p>

awk 允许使用规则表达式,æ ÒŽ®è§„则表达式是否匹配当前行来选择执行独立代码块。以下示例脚本只输出包含字符序列 foo 的那些行åQ?/p>


/foo/ { print }
 


当然åQŒå¯ä»¥ä‹É用更复杂的规则表辑ּã€‚以下脚本将只打印包含æÕQç‚ÒŽ•°çš„行åQ?/p>

/[0-9]+\.[0-9]*/ { print }
 

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

表达式和�/p>

˜q˜æœ‰è®¸å¤šå…¶å®ƒæ–ÒŽ³•可以选择执行代码块。我们可以将ä»ÀL„ä¸€¿Uå¸ƒž®”表辑ּæ”‘Öœ¨ä¸€ä¸ªä»£ç å—之前åQŒä»¥æŽ§åˆ¶ä½•时执行某特定块。仅当对前面的布ž®”表辑ּæ±‚å€égؓ真时åQŒawk 才执行代码块。以下示例脚本输出将输出其第一个字ŒD늭‰äº?fred 的所有行中的½W¬ä¸‰ä¸ªå­—ŒDüc€‚如果当前行的第一个字ŒDµä¸½{‰äºŽ fred åQŒawk ž®†ç‘ô¾l­å¤„理文件而不对当前行执行 print 语句åQ?/p>


$1 == "fred" { print $3 }
 


awk 提供了完整的比较˜qç®—½W¦é›†åˆï¼ŒåŒ…括 "=="ã€?<"ã€?>"ã€?<="ã€?>=" å’?"!="。另外,awk ˜q˜æä¾›äº† "~" å’?"!~" ˜qç®—½W¦ï¼Œå®ƒä»¬åˆ†åˆ«è¡¨ç¤ºâ€œåŒ¹é…â€å’Œâ€œä¸åŒšw…â€ã€‚它们的用法是在˜qç®—½W¦å·¦è¾ÒŽŒ‡å®šå˜é‡ï¼Œåœ¨å³è¾ÒŽŒ‡å®šè§„则表辑ּã€‚如果某一行的½W¬äº”个字ŒDµåŒ…含字½W¦åºåˆ?root åQŒé‚£ä¹ˆä»¥ä¸‹ç¤ºä¾‹å°†åªæ‰“印这一行中的第三个字段åQ?/p>


$5 ~ /root/ { print $3 }
 

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

条äšg语句

awk ˜q˜æä¾›äº†éžå¸¸å¥½çš„¾cÖM¼¼äº?C 语言çš?if 语句。如果您愿意åQŒå¯ä»¥ä‹Éç”?if 语句重写前一个脚本:


{
    if ( $5 ~ /root/ ) {
        print $3
    }
}
 


˜q™ä¸¤ä¸ªè„šæœ¬çš„åŠŸèƒ½å®Œå…¨ä¸€æ —÷€‚第一个示例中åQŒå¸ƒž®”表辑ּæ”‘Öœ¨ä»£ç å—外面。而在½W¬äºŒä¸ªç¤ºä¾‹ä¸­åQŒå°†å¯Òޝä¸€ä¸ªè¾“入行执行代码块,而且我们使用 if 语句来选择执行 print 命ä×o。这两个æ–ÒŽ³•都可以ä‹É用,可以选择最适合脚本其它部分的一¿Uæ–¹æ³•ã€?/p>

以下是更复杂çš?awk if 语句½CÞZ¾‹ã€‚可以看刎ͼŒž®½ç®¡ä½¿ç”¨äº†å¤æ‚、嵌套的条äšg语句åQ?if 语句看上åŽÖM»ä¸Žç›¸åº”çš„ C 语言 if è¯­å¥ä¸€æ øP¼š


{
    if ( $1 == "foo" ) {
        if ( $2 == "foo" ) {
            print "uno"
        } else {
            print "one"
        }
    } else if ($1 == "bar" ) {
        print "two"
    } else {
        print "three"
    }
}
 


使用 if 语句˜q˜å¯ä»¥å°†ä»£ç åQ?/p>


! /matchme/ { print $1 $3 $4 }
 


转换成:

{  
    if ( $0 !~ /matchme/ ) {
        print $1 $3 $4
    }
}
 


˜q™ä¸¤ä¸ªè„šæœ¬éƒ½åªè¾“å‡?ä¸?包含 matchme 字符序列的那些行。此外,˜q˜å¯ä»¥é€‰æ‹©æœ€é€‚合您的代码的方法。它们的功能完全相同ã€?/p>

awk ˜q˜å…è®æ€‹É用布ž®”运½Ž—符 "||"åQˆé€»è¾‘与)å’?"&&"åQˆé€»è¾‘或)åQŒä»¥ä¾¿åˆ›å»ºæ›´å¤æ‚的布ž®”表辑ּåQ?/p>

( $1 == "foo" ) && ( $2 == "bar" ) { print }
 


˜q™ä¸ª½CÞZ¾‹åªæ‰“印第一个字ŒD늭‰äº?foo ä¸?½W¬äºŒä¸ªå­—ŒD늭‰äº?bar 的那些行ã€?/p>

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

数值变量!

至今åQŒæˆ‘们不是打印字½W¦ä¸²ã€æ•´è¡Œå°±æ˜¯ç‰¹å®šå­—ŒDüc€‚然而,awk ˜q˜å…è®¸æˆ‘们执行整数和‹¹®ç‚¹˜qç®—。通过使用数学表达式,可以很方便地¾~–写计算文äšg中空白行数量的脚本。以下就是这样一个脚本:

BEGIN   { x=0 }
/^$/    { x=x+1 }
END     { print "I found " x " blank lines. :)" }
 


åœ?BEGIN 块中åQŒå°†æ•´æ•°å˜é‡ x 初始化成零。然后,awk 每次遇到½Iºç™½è¡Œæ—¶åQŒawk ž®†æ‰§è¡?x=x+1 语句åQŒé€’增 x 。处理完所有行之后åQŒæ‰§è¡?END 块,awk ž®†æ‰“印出最¾lˆæ‘˜è¦ï¼ŒæŒ‡å‡ºå®ƒæ‰¾åˆ°çš„½Iºç™½è¡Œæ•°é‡ã€?/p>

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

字符串化变量

awk 的优点之一ž®±æ˜¯â€œç®€å•å’Œå­—ç¬¦ä¸²åŒ–â€ã€‚æˆ‘è®¤äØ“ awk 变量“字½W¦ä¸²åŒ–â€æ˜¯å› äØ“æ‰€æœ?awk 变量在内部都是按字符串åŞ式存储的。同æ—Óž¼Œawk å˜é‡æ˜¯â€œç®€å•çš„â€ï¼Œå› äØ“å¯ä»¥å¯¹å®ƒæ‰§è¡Œæ•°å­¦æ“ä½œåQŒä¸”只要变量包含有效数字字符ä¸ÔŒ¼Œawk 会自动处理字½W¦ä¸²åˆ°æ•°å­—的转换步骤。要理解我的观点åQŒè¯·ç ”究以下˜q™ä¸ª½CÞZ¾‹åQ?/p>

x="1.01"
# We just set x to contain the *string* "1.01"
x=x+1
# We just added one to a *string*
print x
# Incidentally, these are comments :)
 


awk ž®†è¾“出:

2.01
 


有趣吧!虽然ž®†å­—½W¦ä¸²å€?1.01 赋值给变量 x åQŒæˆ‘们仍然可以对它加一。但åœ?bash å’?python 中却不能˜q™æ ·åšã€‚首先,bash 不支持æÕQ点运½Ž—。而且åQŒå¦‚æž?bash 有“字½W¦ä¸²åŒ–”变量,它们òq¶ä¸â€œç®€å•”;要执行ä“Q何数学操作,bash 要求我们ž®†æ•°å­—放åˆîC¸‘陋的 $( ) ) ¾l“构中。如果ä‹Éç”?pythonåQŒåˆ™å¿…须在对 1.01 字符串执行ä“Q何数学运½Ž—之前,ž®†å®ƒè½¬æ¢æˆæÕQ点倹{€‚虽然这òq¶ä¸å›°éš¾åQŒä½†å®ƒä»æ˜¯é™„加的步骤。如果ä‹Éç”?awkåQŒå®ƒæ˜¯å…¨è‡ªåŠ¨çš„ï¼Œè€Œé‚£ä¼šä‹É我们的代码又好又整洁。如果想要对每个输入行的½W¬ä¸€ä¸ªå­—ŒDµä¹˜æ–¹åƈ加一åQŒå¯ä»¥ä‹É用以下脚本:

{ print ($1^2)+1 }
 


如果做一个小实验åQŒå°±å¯ä»¥å‘现如果某个特定变量不包含有效数字,awk 在对数学表达式求值时会将该变量当作数字零处理ã€?/p>

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

众多˜qç®—½W?/p>

awk 的另一个优ç‚ÒŽ˜¯å®ƒæœ‰å®Œæ•´çš„æ•°å­¦è¿½Ž—符集合。除了标准的加、减、乘、除åQŒawk ˜q˜å…è®æ€‹É用前面演½Cø™¿‡çš„æŒ‡æ•°è¿½Ž—符 "^"、模åQˆä½™æ•ŽÍ¼‰˜qç®—½W?"%" 和其它许多从 C 语言中借入的易于ä‹É用的赋值操作符ã€?/p>

˜q™äº›˜qç®—½W¦åŒ…括前后加减( i++ ã€?--foo åQ‰ã€åŠ åQå‡åQä¹˜åQé™¤èµ‹å€ÆD¿½Ž—符åQ?a+=3 ã€?b*=2 ã€?c/=2.2 ã€?d-=6.2 åQ‰ã€‚不仅如æ­?-- 我们˜q˜æœ‰æ˜“于使用的模åQæŒ‡æ•°èµ‹å€ÆD¿½Ž—符åQ?a^=2 ã€?b%=4 åQ‰ã€?/p>

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

字段分隔½W?/p>

awk 有它自己的特ŒDŠå˜é‡é›†åˆã€‚其中一些允许调æ•?awk 的运行方式,而其它变量可以被è¯Õd–以收集关于输入的有用信息。我们已¾læŽ¥è§¦è¿‡˜q™äº›ç‰ÒŽ®Šå˜é‡ä¸­çš„一个,FS。前面已¾læåˆ°è¿‡åQŒè¿™ä¸ªå˜é‡è®©æ‚¨å¯ä»¥è®¾¾|?awk 要查扄¡š„字段之间的字½W¦åºåˆ—。我们ä‹Éç”?/etc/passwd ä½œäØ“è¾“å…¥æ—Óž¼Œž®?FS 讄¡½®æˆ?":"。当˜q™æ ·åšæœ‰é—®é¢˜æ—Óž¼Œæˆ‘们˜q˜å¯ä»¥æ›´ç‰|´»åœîC‹Éç”?FSã€?/p>

FS å€¼åÆˆæ²¡æœ‰è¢«é™åˆ¶äØ“å•ä¸€å­—ç¬¦åQ›å¯ä»¥é€šè¿‡æŒ‡å®šä»ÀL„é•¿åº¦çš„å­—½W¦æ¨¡å¼ï¼Œž®†å®ƒè®„¡½®æˆè§„则表辑ּã€‚如果正在处理由一个或多个 tab 分隔的字ŒDµï¼Œæ‚¨å¯èƒ½å¸Œæœ›æŒ‰ä»¥ä¸‹æ–¹å¼è®„¡½® FSåQ?/p>

FS="\t+"
 


以上½CÞZ¾‹ä¸­ï¼Œæˆ‘们使用ç‰ÒޮР"+" 规则表达式字½W¦ï¼Œå®ƒè¡¨½Cºâ€œä¸€ä¸ªæˆ–多个前一字符”ã€?/p>

如果字段ç”Þq©ºæ ¼åˆ†éš”(一个或多个½Iºæ ¼æˆ?tabåQ‰ï¼Œæ‚¨å¯èƒ½æƒ³è¦å°† FS 讄¡½®æˆä»¥ä¸‹è§„则表辑ּåQ?/p>

FS="[[:space:]+]"
 


˜q™ä¸ªèµ‹å€ÆD¡¨è¾‘Ö¼ä¹Ÿæœ‰é—®é¢˜åQŒå®ƒòq‰™žå¿…è¦ã€‚äØ“ä»€ä¹ˆï¼Ÿå› äØ“¾~ºçœæƒ…况下,FS 讄¡½®æˆå•一½Iºæ ¼å­—符åQŒawk ž®†è¿™è§£é‡Šæˆè¡¨½Cºâ€œä¸€ä¸ªæˆ–多个½Iºæ ¼æˆ?tab”。在˜q™ä¸ªç‰ÒޮнCÞZ¾‹ä¸­ï¼Œ¾~ºçœ FS 讄¡½®æ°æ°æ˜¯æ‚¨æœ€æƒŒ™¦çš„!

复杂的规则表辑ּä¹Ÿä¸æˆé—®é¢˜ã€‚即使您的记录由单词 "foo" 分隔åQŒåŽé¢è·Ÿç€ä¸‰ä¸ªæ•°å­—åQŒä»¥ä¸‹è§„则表辑ּä»å…è®¸å¯¹æ•°æ®˜q›è¡Œæ­£ç¡®çš„分析:

FS="foo[0-9][0-9][0-9]"
 

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

字段数量

接着我们要讨论的两个变量通常òq¶ä¸æ˜¯éœ€è¦èµ‹å€¼çš„åQŒè€Œæ˜¯ç”¨æ¥è¯Õd–以获取关于输入的有用信息。第一个是 NF 变量åQŒä¹Ÿå«åšâ€œå­—ŒD‰|•°é‡â€å˜é‡ã€‚awk 会自动将该变量设¾|®æˆå½“前记录中的字段数量。可以ä‹Éç”?NF 变量来只昄¡¤ºæŸäº›è¾“入行:

NF == 3 { print "this particular record has three fields: " $0 }
 


当然åQŒä¹Ÿå¯ä»¥åœ¨æ¡ä»¶è¯­å¥ä¸­ä½¿ç”¨ NF 变量åQŒå¦‚下:

{  
    if ( NF > 2 ) {
        print $1 " " $2 ":" $3
    }
}
 

 

 


åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQï¼‹åQ?br /> 

 

记录�/p>

记录å?(NR) æ˜¯å¦ä¸€ä¸ªæ–¹ä¾¿çš„å˜é‡ã€‚å®ƒå§‹ç»ˆåŒ…å«å½“å‰è®°å½•çš„ç¼–åøP¼ˆawk ž®†ç¬¬ä¸€ä¸ªè®°å½•算作记录号 1åQ‰ã€‚è¿„ä»ŠäØ“æ­¢ï¼Œæˆ‘ä»¬å·²ç»å¤„ç†äº†æ¯ä¸€è¡ŒåŒ…å«ä¸€ä¸ªè®°å½•çš„è¾“å…¥æ–‡äšg。对于这些情况,NR ˜q˜ä¼šå‘Šè¯‰æ‚¨å½“前行受÷€‚然而,当我们在本系列以后部分中开始处理多行记录时åQŒå°±ä¸ä¼šå†æœ‰˜q™ç§æƒ…况åQŒæ‰€ä»¥è¦æ³¨æ„åQå¯ä»¥è±¡ä½¿ç”¨ NF 变量一样ä‹Éç”?NR 来只打印某些输入行:

(NR < 10 ) || (NR > 100) { print "We are on record number 1-9 or 101+" }
 


另一个示例:

{
    #skip header
    if ( NR > 10 ) {
        print "ok, now for the real information!"
    }
}
 



]]>
假如要将当前目录下的所有文件中的windows替换成linux,可以执行http://www.aygfsteel.com/lingy/archive/2009/05/27/278139.html林光�/dc:creator>林光�/author>Wed, 27 May 2009 01:19:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/05/27/278139.html
find -type f | xargs perl -i -pe s%windows%linux%g


今天工作需要,其实ž®±æ˜¯ä¸€è¡Œå‘½ä»¤ï¼Œ
比如要将所有包含abcæ–‡äšg里面的abc替换为def

  1. find -type f | xargs perl -i -pe s%abc%def%g

如果要把子目录的内容一èµäh›¿æ?/p>

  1. ls -R | xargs perl -i -pe s%abc%def%g


 

˜q™ä¸¤å¤©åœ¨æž„徏一个应用的使用用到了maven,ç”׃ºŽproject很大,­‘Œ™ƒöæœ?00多个pom.xmlæ–‡äšg,更郁é—ïLš„æ˜¯åœ¨å¾ˆå¤špom.xmlæ–‡äšg里都单独指定了资源库的url,我需要把˜q™äº›èµ„源库的url¾lŸä¸€æŒ‡å®šåˆ°nexus本地中央åº?

手工一个个æ”ÒŽ–‡ä»‰™…¾|®æœ‰ç‚¹ä¸å¤ªå®žé™?所以google了一ä¸?扑ֈ°æ‰šw‡æ›¿æ¢æ–‡äšg内容的好æ–ÒŽ³•,命ä×o¾l“构如下:

find -name '要查扄¡š„æ–‡äšgå? | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'

下面˜q™ä¸ªä¾‹å­ž®±æ˜¯ž®†å½“前目录及所有子目录下的所有pom.xmlæ–‡äšg中的”http://repo1.maven.org/maven2“替换ä¸?#8221;http://localhost:8081/nexus/content/groups/public“.

find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content/groups/public|g'

˜q™é‡Œç”¨åˆ°äº†Perl语言,

perl -pi -e

在Perl 命ä×o中加ä¸?e 选项åQŒåŽè·Ÿä¸€è¡Œä»£ç ï¼Œé‚£å®ƒž®×ƒ¼šåƒè¿è¡Œä¸€ä¸ªæ™®é€šçš„Perl 脚本那样˜qè¡Œè¯¥ä»£ç ?

从命令行中ä‹É用Perl 能够帮助实现一些强大的、实时的转换。认真研½I¶æ­£åˆ™è¡¨è¾‘Ö¼åQŒåƈ正确åœîC‹É用,ž®†ä¼šä¸ºæ‚¨çœåŽ»å¤§é‡çš„æ‰‹å·¥ç¼–è¾‘å·¥ä½œã€?/p>

]]>
2007-08-02 | linux 替换文äšg内容 sed工具 http://www.aygfsteel.com/lingy/archive/2009/05/27/278138.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Wed, 27 May 2009 01:16:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/05/27/278138.html2007-08-02 | linux 替换文äšg内容 sed工具
标签åQ?span id="tagsBox">sed 
sed ¾~–辑器是 Linux ¾pȝ»Ÿ½Ž¡ç†å‘˜çš„工具包中最有用的资产之一åQ?
å› æ­¤åQŒæœ‰å¿…要å½Õdº•åœîCº†è§£å…¶åº”用

Linux 操作¾pȝ»Ÿæœ€å¤§çš„一个好处是它带有各¿Uå„æ ïLš„实用工具。存在如此之多不同的实用工具åQŒå‡ ä¹Žä¸å¯èƒ½çŸ¥é“òq¶äº†è§£æ‰€æœ‰è¿™äº›å·¥å…—÷€‚可以简化关键情况下操作的一个实用工å…äh˜¯ sed。它是ä“Q何管理员的工具包中最强大的工具之一åQŒåƈ且可以证明它自己在关键情况下非常有ä­h倹{€?

sed 实用工具是一ä¸?#8220;¾~–辑å™?#8221;åQŒä½†å®ƒä¸Žå…¶å®ƒå¤§å¤šæ•°ç¼–辑器不同。除了不面向屏幕之外åQŒå®ƒ˜q˜æ˜¯éžäº¤äº’式的。这意味着您必™åÕd°†è¦å¯¹æ•°æ®æ‰§è¡Œçš„命令插入到命ä×o行或要处理的脚本中。当昄¡¤ºå®ƒæ—¶åQŒè¯·å¿˜è®°æ‚¨åœ¨ä½¿ç”¨ Microsoft Word 或其它大多数¾~–辑器时拥有的交互式¾~–辑文äšg功能。sed 在一个文ä»Óž¼ˆæˆ–文仉™›†åQ‰ä¸­éžäº¤äº’å¼ã€åÆˆä¸”ä¸åŠ è¯¢é—®åœ°æŽ¥æ”¶ä¸€¾pÕdˆ—çš„å‘½ä»¤åÆˆæ‰§è¡Œå®ƒä»¬ã€‚å› è€Œï¼Œå®ƒæµ¾læ–‡æœ¬å°±å¦‚同水流¾læºª‹¹ä¸€æ øP¼Œå› è€?sed 恰当åœîC»£è¡¨äº†‹¹ç¼–辑器。它可以用来ž®†æ‰€æœ‰å‡ºçŽ°çš„ "Mr. Smyth" 修改ä¸?"Mr. Smith"åQŒæˆ–ž®?"tiger cub" 修改ä¸?"wolf cub"。流¾~–辑器非帔R€‚合于执行重复的¾~–辑åQŒè¿™¿Ué‡å¤ç¼–辑如果由人工完成ž®†èŠ±è´¹å¤§é‡çš„æ—‰™—´ã€‚其参数可能和一‹Æ¡æ€§ä‹É用一个简单的操作所需的参æ•îC¸€æ ähœ‰é™ï¼Œæˆ–者和一个具有成千上万行要进行编辑修改的脚本文äšg一样复杂。sed æ˜?Linux å’?UNIX 工具½Ž×ƒ¸­æœ€æœ‰ç”¨çš„工具之一åQŒä¸”使用的参数非常少ã€?

sed 的工作方�

sed 实用工具按顺序逐行ž®†æ–‡ä»¶è¯»å…¥åˆ°å†…å­˜ä¸­ã€‚ç„¶åŽï¼Œå®ƒæ‰§è¡ŒäØ“è¯¥è¡ŒæŒ‡å®šçš„æ‰€æœ‰æ“ä½œï¼Œòq¶åœ¨å®Œæˆè¯äh±‚的修改之后将该行攑֛žåˆ°å†…存中åQŒä»¥ž®†å…¶è½¬å‚¨è‡³ç»ˆç«¯ã€‚完成了˜q™ä¸€è¡Œä¸Šçš„æ‰€æœ‰æ“ä½œä¹‹åŽï¼Œå®ƒè¯»å–文件的下一行,然后重复该过½E‹ç›´åˆ°å®ƒå®Œæˆè¯¥æ–‡ä»¶ã€‚如同前面所提到的,默认输出是将每一行的内容输出到屏òq•上。在˜q™é‡ŒåQŒå¼€å§‹æ¶‰åŠåˆ°ä¸¤ä¸ªé‡è¦çš„因素—首先,输出可以被重定向到另一文äšg中,以保存变化;½W¬äºŒåQŒæºæ–‡äšgåQˆé»˜è®¤åœ°åQ‰ä¿æŒä¸è¢«ä¿®æ”V€‚sed 默认è¯Õd–整个文äšgòq¶å¯¹å…¶ä¸­çš„æ¯ä¸€è¡Œè¿›è¡Œä¿®æ”V€‚不˜q‡ï¼Œå¯ä»¥æŒ‰éœ€è¦å°†æ“ä½œé™åˆ¶åœ¨æŒ‡å®šçš„行上ã€?

该实用工å…ïLš„语法为:


sed [options] '{command}' [filename]

在这½‹‡æ–‡ç« ä¸­åQŒæˆ‘们将‹¹è§ˆæœ€å¸¸ç”¨çš„命令和选项åQŒåƈ演示它们如何工作åQŒä»¥åŠå®ƒä»¬é€‚于在何处ä‹É用ã€?

替换命ä×o

sed 实用工具以及其它ä»ÖM½•¾cÖM¼¼çš„编辑器的最常用的命令之一是用一个值替换另一个倹{€‚用来实现这一目的的操作的命ä×o部分语法是:


's/{old value}/{new value}/'

因而,下面演示了如何非常简单地ž®?"tiger" 修改ä¸?"wolf"åQ?


$ echo The tiger cubs will meet on Tuesday after school | sed
's/tiger/wolf/'
The wolf cubs will meet on Tuesday after school
$

注意如果输入是源自之前的命ä×o输出åQŒåˆ™ä¸éœ€è¦æŒ‡å®šæ–‡ä»¶åâ€”同æ ïLš„原则也适用äº?awk、sort 和其它大多数 LinuxUNIX 命ä×o行实用工å…ïL¨‹åºã€?

多次修改

如果需要对同一文äšg或行作多‹Æ¡ä¿®æ”¹ï¼Œå¯ä»¥æœ‰ä¸‰¿Uæ–¹æ³•来实现它。第一¿Uæ˜¯ä½¿ç”¨ "-e" 选项åQŒå®ƒé€šçŸ¥½E‹åºä½¿ç”¨äº†å¤šæ¡ç¼–辑命令。例如:


$ echo The tiger cubs will meet on Tuesday after school | sed -e '
s/tiger/wolf/' -e 's/after/before/'
The wolf cubs will meet on Tuesday before school
$

˜q™æ˜¯å®žçŽ°å®ƒçš„éžå¸¸å¤æ‚çš„æ–¹æ³•ï¼Œå› æ­¤ "-e" 选项不常被大范围使用。更好的æ–ÒŽ³•是用分号来分隔命令:


$ echo The tiger cubs will meet on Tuesday after school | sed '
s/tiger/wolf/; s/after/before/'
The wolf cubs will meet on Tuesday before school
$

注意分号必须是紧跟斜¾U¿ä¹‹åŽçš„下一个字½W¦ã€‚如果两者之间有一个空æ û|¼Œæ“ä½œž®†ä¸èƒ½æˆåŠŸå®Œæˆï¼Œòq¶è¿”回一条错误消息。这两种æ–ÒŽ³•都很好,但许多管理员更喜‹Æ¢å¦ä¸€¿Uæ–¹æ³•。要注意的一个关键问题是åQŒä¸¤ä¸ªæ’‡å?(' ') 之间的全部内定wƒ½è¢«è§£é‡ŠäØ“ sed 命ä×o。直到您输入了第二个撇号åQŒè¯»å…¥è¿™äº›å‘½ä»¤çš„ shell ½E‹åºæ‰ä¼šè®¤äؓ您完成了输入。这意味着可以在多行上输入命ä×o—同æ—?Linux ž®†æ½Cºç¬¦ä»?PS1 å˜äØ“ä¸€ä¸ªåšg¾l­æ½Cºç¬¦åQˆé€šå¸¸ä¸?">"åQ‰â€”直到输入了½W¬äºŒä¸ªæ’‡å—÷€‚一旦输入了½W¬äºŒä¸ªæ’‡åøP¼Œòq¶ä¸”按下äº?Enter 键,则处理就˜q›è¡Œòq¶äñ”生相同的¾l“æžœåQŒå¦‚下所½Cºï¼š


$ echo The tiger cubs will meet on Tuesday after school | sed '
> s/tiger/wolf/
> s/after/before/'
The wolf cubs will meet on Tuesday before school
$

全局修改

让我们开始一‹Æ¡çœ‹ä¼¼ç®€å•çš„¾~–辑。假定在要修改的消息中出çŽîCº†å¤šæ¬¡è¦ä¿®æ”¹çš„™å¹ç›®ã€‚默认方式下åQŒç»“果可能和预期的有所不同åQŒå¦‚下所½Cºï¼š


$ echo The tiger cubs will meet this Tuesday at the same time
as the meeting last Tuesday | sed 's/Tuesday/Thursday/'
The tiger cubs will meet this Thursday at the same time
as the meeting last Tuesday
$

与将出现的每ä¸?"Tuesday" 修改ä¸?"Thursday" 相反åQŒsed ¾~–辑器在扑ֈ°ä¸€ä¸ªè¦ä¿®æ”¹çš„é¡¹ç›®åÆˆä½œäº†ä¿®æ”¹ä¹‹åŽ¾l§ç®‹å¤„理下一行,而不è¯ÀL•´è¡Œã€‚sed 命ä×o功能大体上类ä¼égºŽæ›¿æ¢å‘½ä×oåQŒè¿™æ„å‘³ç€å®ƒä»¬éƒ½å¤„ç†æ¯ä¸€è¡Œä¸­å‡ºçŽ°çš„ç¬¬ä¸€ä¸ªé€‰å®šåºåˆ—ã€‚äØ“äº†æ›¿æ¢å‡ºçŽ°çš„æ¯ä¸€ä¸ªé¡¹ç›®ï¼Œåœ¨åŒä¸€è¡Œä¸­å‡ºçŽ°å¤šä¸ªè¦æ›¿æ¢çš„™å¹ç›®çš„æƒ…况下åQŒæ‚¨å¿…须指定在全局˜q›è¡Œè¯¥æ“ä½œï¼š


$ echo The tiger cubs will meet this Tuesday at the same time
as the meeting last Tuesday | sed 's/Tuesday/Thursday/g'
The tiger cubs will meet this Thursday at the same time
as the meeting last Thursday
$

误‚®°ä½ä¸½Ž¡æ‚¨è¦æŸ¥æ‰„¡š„序列是否仅包含一个字½W¦æˆ–词组åQŒè¿™¿Uå¯¹å…¨å±€åŒ–的要求都是必需的ã€?

sed ˜q˜å¯ä»¥ç”¨æ¥ä¿®æ”¹è®°å½•å­—ŒDµåˆ†éš”符。例如,以下命ä×ož®†æŠŠæ‰€æœ‰çš„ tab 修改为空æ û|¼š


sed 's// /g'

其中åQŒç¬¬ä¸€¾l„æ–œ¾U¿ä¹‹é—´çš„™å¹ç›®æ˜¯ä¸€ä¸?tabåQŒè€Œç¬¬äºŒç»„斜线之间的项目是一个空根{€‚作ä¸ÞZ¸€æ¡é€šç”¨çš„规则,sed 可以用来ž®†ä“Q意的可打印字½W¦ä¿®æ”¹äØ“ä»ÀL„å…¶å®ƒçš„可打印字符。如果您惛_°†ä¸å¯æ‰“印字符修改为可打印字符—例如,铃铛修改为单è¯?"bell"—sed 不是适于完成˜q™é¡¹å·¥ä½œçš„工典P¼ˆä½?tr 是)ã€?

有时åQŒæ‚¨ä¸æƒ³ä¿®æ”¹åœ¨ä¸€ä¸ªæ–‡ä»¶ä¸­å‡ºçŽ°çš„æ‰€æœ‰æŒ‡å®šé¡¹ç›®ã€‚æœ‰æ—Óž¼Œæ‚¨åªæƒ›_œ¨æ»¡èƒö某些条äšg时才作修改—例如,在与其它一些数据匹配之后才作修攏V€‚äØ“äº†è¯´æ˜Žè¿™ä¸€ç‚¹ï¼Œè¯¯‚€ƒè™‘以下文本文äšgåQ?


$ cat sample_one
one 1
two 1
three 1
one 1
two 1
two 1
three 1
$

假定希望ç”?"2" 来替æ?"1"åQŒä½†ä»…在单词 "two" 之后才作替换åQŒè€Œä¸æ˜¯æ¯ä¸€è¡Œçš„æ‰€æœ‰ä½¾|®ã€‚通过指定在给出替换命令之前必™åÕd­˜åœ¨ä¸€‹Æ¡åŒ¹é…ï¼Œå¯ä»¥å®žçް˜q™ä¸€ç‚¹ï¼š


$ sed '/two/ s/1/2/' sample_one
one 1
two 2
three 1
one 1
two 2
two 2
three 1
$

现在åQŒä‹É其更加准¼‹®ï¼š


$ sed '
> /two/ s/1/2/
> /three/ s/1/3/' sample_one
one 1
two 2
three 3
one 1
two 2
two 2
three 3
$

请再‹Æ¡è®°ä½å”¯ä¸€æ”¹å˜äº†çš„æ˜¯æ˜¾½Cºã€‚如果您查看源文ä»Óž¼Œæ‚¨å°†å‘现它始¾lˆä¿æŒä¸å˜ã€‚您必须ž®†è¾“å‡ÞZ¿å­˜è‡³å¦ä¸€ä¸ªæ–‡ä»Óž¼Œä»¥å®žçŽ°æ°¸ä¹…ä¿å­˜ã€‚å€¼å¾—é‡å¤çš„æ˜¯åQŒä¸å¯ÒŽºæ–‡äšg作修改实际是¼œæ€¸­æœ‰ç¦â€”它让您能够å¯ÒŽ–‡ä»¶è¿›è¡Œè¯•验而不会造成ä»ÖM½•实际的损宻I¼Œç›´åˆ°è®©æ­£¼‹®å‘½ä»¤ä»¥æ‚¨é¢„期和希望的方式进行工作ã€?

以下命ä×ož®†ä¿®æ”¹åŽçš„输å‡ÞZ¿å­˜è‡³ä¸€ä¸ªæ–°çš„æ–‡ä»Óž¼š


$ sed '
> /two/ s/1/2/
> /three/ s/1/3/' sample_one > sample_two

该输出文件将所有修改合òq¶åœ¨å…¶ä¸­åQŒåƈ且这些修攚w€šå¸¸ž®†åœ¨å±å¹•上显½Cºã€‚现在可以用 head、cat 或ä“Q意其它类似的实用工具来进行查看ã€?

脚本文äšg

sed 工具允许您创å»ÞZ¸€ä¸ªè„šæœ¬æ–‡ä»Óž¼Œå…¶ä¸­åŒ…含从该文äšg而不是在命ä×o行进行处理的命ä×oåQŒåƈä¸?sed 工具通过 "-f" 选项来引用。通过创徏一个脚本文ä»Óž¼Œæ‚¨èƒ½å¤Ÿä¸€‹Æ¡åˆä¸€‹Æ¡åœ°é‡å¤˜qè¡Œç›¸åŒçš„æ“ä½œï¼Œòq¶æŒ‡å®šæ¯”每次希望从命令行˜q›è¡Œå¤„理的操作详¾l†å¾—多的操作ã€?

考虑以下脚本文äšgåQ?


$ cat sedlist
/two/ s/1/2/
/three/ s/1/3/
$

现在可以在数据文件上使用脚本文äšgåQŒèŽ·å¾—å’Œæˆ‘ä»¬ä¹‹å‰çœ‹åˆ°çš„ç›¸åŒçš„¾l“æžœåQ?


$ sed -f sedlist sample_one
one 1
two 2
three 3
one 1
two 2
two 2
three 3
$

注意当调ç”?"-f" 选项æ—Óž¼Œåœ¨æºæ–‡äšg内或命ä×o行中不ä‹É用撇受÷€‚脚本文ä»Óž¼Œä¹Ÿç§°ä¸ºæºæ–‡äšgåQŒå¯¹äºŽæƒ³é‡å¤å¤šæ¬¡çš„æ“ä½œå’Œä»Žå‘½ä»¤è¡Œ˜qè¡Œå¯èƒ½å‡ºé”™çš„复杂命令很有ä­h倹{€‚编辑源文äšgòq¶ä¿®æ”¹ä¸€ä¸ªå­—½W¦æ¯”在命令行中重新输入一条多行的™å¹ç›®è¦å®¹æ˜“得多ã€?

限制�

¾~–辑器默认查看输入到‹¹ç¼–辑器中的每一行,且默认在输入到流¾~–辑器中的每一行上˜q›è¡Œ¾~–辑。这可以通过在发出命令之前指定约束条件来˜q›è¡Œä¿®æ”¹ã€‚例如,只在此示例文件的输出的第 5 和第 6 行中ç”?"2" 来替æ?"1"åQŒå‘½ä»¤å°†ä¸ºï¼š


$ sed '5,6 s/1/2/' sample_one
one 1
two 1
three 1
one 1
two 2
two 2
three 1
$

在这¿Uæƒ…况下åQŒå› ä¸ø™¦ä¿®æ”¹çš„行是专门指定的åQŒæ‰€ä»¥ä¸éœ€è¦æ›¿æ¢å‘½ä»¤ã€‚因此,您可以灵‹zÕdœ°æ ÒŽ®åŒšw…å‡†åˆ™åQˆå¯ä»¥æ˜¯è¡Œå·æˆ–一¿UåŒ¹é…æ¨¡å¼ï¼‰æ¥é€‰æ‹©è¦ä¿®æ”¹å“ªäº›è¡ŒåQˆä»Žæ ÒŽœ¬ä¸Šé™åˆ¶ä¿®æ”¹ï¼‰ã€?

¼›æ­¢æ˜„¡¤º

sed 默认ž®†æ¥è‡ªæºæ–‡äšg的每一行显½Cºåˆ°å±å¹•上(或重定向åˆîC¸€ä¸ªæ–‡ä»¶ä¸­åQ‰ï¼Œè€Œæ— è®ø™¯¥è¡Œæ˜¯å¦å—到编辑操作的影响åQ?-n" 参数覆盖了这一操作ã€?-n" 覆盖了所有的昄¡¤ºåQŒåƈ且不昄¡¤ºä»ÖM½•一行,而无论它们是否被¾~–辑操作修改。例如:


$ sed -n -f sedlist sample_one
$

$ sed -n -f sedlist sample_one > sample_two
$ cat sample_two
$

在第一个示例中åQŒå±òq•上不显½CÞZ“Q何东è¥Ñ€‚在½W¬äºŒä¸ªç¤ºä¾‹ä¸­åQŒä¸ä¿®æ”¹ä»ÖM½•东西åQŒå› æ­¤ä¸ž®†ä“Q何东西写到新的文件中—它最后是½Iºçš„。这不是否定了编辑的全部目的吗?ä¸ÞZ»€ä¹ˆè¿™æ˜¯æœ‰ç”¨çš„åQŸå®ƒæ˜¯æœ‰ç”¨çš„ä»…å› ä¸?"-n" 选项能够被一条显½Cºå‘½ä»?(-p) è¦†ç›–ã€‚äØ“äº†è¯´æ˜Žè¿™ä¸€ç‚¹ï¼Œå‡å®šçŽ°åœ¨åƒä¸‹é¢è¿™æ ·å¯¹è„šæœ¬æ–‡äšg˜q›è¡Œäº†ä¿®æ”¹ï¼š


$ cat sedlist
/two/ s/1/2/p
/three/ s/1/3/p
$

然后下面是运行它的结果:


$ sed -n -f sedlist sample_one
two 2
three 3
two 2
two 2
three 3
$

保持不变的行全部不被昄¡¤ºã€‚只有受到编辑操作媄响的行被昄¡¤ºäº†ã€‚在˜q™ç§æ–¹å¼ä¸‹ï¼Œå¯ä»¥ä»…å–å‡ø™¿™äº›è¡ŒåQŒè¿›è¡Œä¿®æ”¹ï¼Œç„¶åŽæŠŠå®ƒä»¬æ”¾åˆîC¸€ä¸ªå•独的文äšg中:


$ sed -n -f sedlist sample_one > sample_two
$

$ cat sample_two
two 2
three 3
two 2
two 2
three 3
$

利用它的另一¿Uæ–¹æ³•是只显½CÞZ¸€å®šæ•°é‡çš„行。例如,只显½C?2-6 行,同时不做其它的编辑修改:


$ sed -n '2,6p' sample_one
two 1
three 1
one 1
two 1
two 1
$

其它所有的行被忽略åQŒåªæœ?2-6 è¡Œä½œä¸ø™¾“出显½Cºã€‚这是一™å¹å‡ºè‰²çš„功能åQŒå…¶å®ƒä“Q何工具都不能å®ÒŽ˜“地实现。Head ž®†æ˜¾½CÞZ¸€ä¸ªæ–‡ä»¶çš„™å‰™ƒ¨åQŒè€?tail ž®†æ˜¾½CÞZ¸€ä¸ªæ–‡ä»¶çš„底部åQŒä½† sed 允许从ä“Q意位¾|®å–出想要的ä»ÀL„å†…容ã€?

删除�

ç”¨ä¸€ä¸ªå€¼æ›¿æ¢å¦ä¸€ä¸ªå€ÆD¿œéžæµ¾~–辑器可以执行的唯一功能。它˜q˜å…·æœ‰è®¸å¤šçš„æ½œåœ¨åŠŸèƒ½åQŒåœ¨æˆ‘看来第二种最常用的功能是删除。删除与替换的工作方式相同,只是它删除指定的行(如果您想要删除一个单词而不是一行,不要考虑删除åQŒè€Œåº”考虑用空的内å®ÒŽ¥æ›¿æ¢å®ƒâ€”s/cat//åQ‰ã€?

该命令的语法是:


'{what to find} d'

ä»?sample_one æ–‡äšg中删除包å?"two" 的所有行åQ?


$ sed '/two/ d' sample_one
one 1
three 1
one 1
three 1
$

从显½Cºå±ä¸­åˆ é™¤å‰ä¸‰è¡ŒåQŒè€Œä¸½Ž¡å®ƒä»¬çš„内容是什么:


$ sed '1,3 d' sample_one
one 1
two 1
two 1
three 1
$

只显½Cºå‰©ä¸‹çš„行,前三行不在显½Cºå±ä¸­å‡ºçŽ°ã€‚å¯¹äºŽæµ¾~–辑器,一般当它们涉及到全局表达式时åQŒç‰¹åˆ«æ˜¯åº”用于删除操作时åQŒæœ‰å‡ ç‚¹è¦è®°ä½ï¼š

上三角号 (^) 表示一行的开始,因此åQŒå¦‚æž?"two" 是该行的头三个字½W¦ï¼Œåˆ?


sed '/^two/ d' sample_one

ž®†åªåˆ é™¤è¯¥è¡Œã€?
¾ŸŽå…ƒ½W¦å· ($) 代表文äšg的结ž®¾ï¼Œæˆ–一行的¾l“å°¾åQŒå› æ­¤ï¼Œå¦‚æžœ "two" 是该行的最后三个字½W¦ï¼Œåˆ?


sed '/two$/ d' sample_one

ž®†åªåˆ é™¤è¯¥è¡Œã€?

ž®†è¿™ä¸¤è€…结合在一èµïLš„¾l“æžœåQ?


sed '/^$/ d' {filename}

删除文äšg中的所有空白行。例如,以下命ä×ož®?"1" 替换ä¸?"2"åQŒä»¥åŠå°† "1" 替换ä¸?"3"åQŒåƈ删除文äšg中所有尾随的½Iø™¡ŒåQ?


$ sed '/two/ s/1/2/; /three/ s/1/3/; /^$/ d' sample_one
one 1
two 1
three 1
one 1
two 2
two 2
three 1
$

å…‰™€šå¸¸çš„用途是删除一个标题。以下命令将删除文äšg中所有的行,从第一行直到第一个空行:


sed '1,/^$/ d' {filename}

æ·ÕdŠ å’Œæ’å…¥æ–‡æœ?

可以¾l“合使用 sed å’?"a" 选项ž®†æ–‡æœ¬æ·»åŠ åˆ°ä¸€ä¸ªæ–‡ä»¶çš„æœ«å°¾ã€‚å®žçŽ°æ–¹æ³•å¦‚ä¸‹ï¼š


$ sed '$a
> This is where we stop
> the test' sample_one
one 1
two 1
three 1
one 1
two 1
two 1
three 1
This is where we stop
the test
$

在该命ä×o中,¾ŸŽå…ƒ½W¦å· ($) 表示文本ž®†è¢«æ·ÕdŠ åˆ°æ–‡ä»¶çš„æœ«å°¾ã€‚åæ–œçº¿ () 是必需的,它表½Cºå°†æ’å…¥ä¸€ä¸ªå›žè½¦ç¬¦ã€‚å¦‚æžœå®ƒä»¬è¢«é—æ¼äº†ï¼Œåˆ™å°†å¯ÆD‡´ä¸€ä¸ªé”™è¯¯ï¼Œæ˜„¡¤ºè¯¥å‘½ä»¤æ˜¯é”™äؕ的;在ä“Q何要输入回èžR的地æ–ÒŽ‚¨å¿…须使用反斜¾Uѝ€?

要将˜q™äº›è¡Œæ·»åŠ åˆ°½W?4 和第 5 个位¾|®è€Œä¸æ˜¯æœ«ž®¾ï¼Œåˆ™å‘½ä»¤å˜ä¸ºï¼š


$ sed '3a
> This is where we stop
> the test' sample_one
one 1
two 1
three 1
This is where we stop
the test
one 1
two 1
two 1
three 1
$

˜q™å°†æ–‡æœ¬æ·ÕdŠ åˆ°ç¬¬ 3 行之后。和几乎所有的¾~–è¾‘å™¨ä¸€æ øP¼Œæ‚¨å¯ä»¥é€‰æ‹©æ’入而不是添加(如果您希望这æ ïLš„话)。这两者的区别是添加跟在指定的行之后,而插入从指定的行开始。当用插入来代替æ·ÕdŠ æ—Óž¼Œåªéœ€ç”?"i" 来代æ›?"a"åQŒå¦‚下所½Cºï¼š


$ sed '3i
> This is where we stop
> the test' sample_one
one 1
two 1
This is where we stop
the test
three 1
one 1
two 1
two 1
three 1
$

新的文本出现在输出的中间位置åQŒè€Œå¤„理通常在指定的操作执行以后¾l§ç®‹˜q›è¡Œã€?

è¯Õd†™æ–‡äšg

重定向输出的功能已经演示˜q‡äº†åQŒä½†éœ€è¦æŒ‡å‡ºçš„æ˜¯ï¼Œåœ¨ç¼–辑命令运行期间可以同步地è¯Õd…¥å’Œå†™å‡ºæ–‡ä»¶ã€‚例如,执行替换åQŒåƈž®?1-3 行写到名¿UîCØ“ sample_three 的文件中åQ?


$ sed '
> /two/ s/1/2/
> /three/ s/1/3/
> 1,3 w sample_three' sample_one
one 1
two 2
three 3
one 1
two 2
two 2
three 3
$

$ cat sample_three
one 1
two 2
three 3
$

ç”׃ºŽä¸?w (write) 命ä×o指定äº?"1,3"åQŒæ‰€ä»¥åªæœ‰æŒ‡å®šçš„行被写到了新文äšgä¸­ã€‚æ— è®ø™¢«å†™çš„æ˜¯å“ªäº›è¡ŒåQŒæ‰€æœ‰çš„行都在默认输å‡ÞZ¸­æ˜„¡¤ºã€?

修改命ä×o

除了替换™å¹ç›®ä¹‹å¤–åQŒè¿˜å¯ä»¥ž®†è¡Œä»Žä¸€ä¸ªå€ég¿®æ”¹äؓ另一个倹{€‚要è®îC½çš„æ˜¯åQŒæ›¿æ¢æ˜¯å¯¹å­—½W¦é€ä¸ª˜q›è¡ŒåQŒè€Œä¿®æ”¹åŠŸèƒ½ä¸Žåˆ é™¤¾cÖM¼¼åQŒå®ƒå½±å“æ•´è¡ŒåQ?


$ sed '/two/ c
> We are no longer using two' sample_one
one 1
We are no longer using two
three 1
one 1
We are no longer using two
We are no longer using two
three 1
$

修改命ä×o与替换的工作方式很相ä¼û|¼Œä½†åœ¨èŒƒå›´ä¸Šè¦æ›´å¤§äº›â€”å°†ä¸€ä¸ªé¡¹ç›®å®Œå…¨æ›¿æ¢äØ“å¦ä¸€ä¸ªé¡¹ç›®ï¼Œè€Œæ— è®ºå­—½W¦å†…å®ÒŽˆ–上下文。夸张一点讲åQŒå½“使用替换æ—Óž¼Œåªæœ‰å­—符 "1" 被字½W?"2" 替换åQŒè€Œå½“使用修改æ—Óž¼ŒåŽŸæ¥çš„æ•´è¡Œå°†è¢«ä¿®æ”V€‚在两种情况下,要寻扄¡š„匚w…æ¡äšg都仅ä¸?"two"ã€?

修改全部ä½?#8230;…

对于大多æ•?sed 命ä×oåQŒè¯¦¾l†è¯´æ˜Žå„¿UåŠŸèƒ½è¦˜q›è¡Œä½•种修改。利用感叹号åQŒå¯ä»¥åœ¨é™¤æŒ‡å®šä½¾|®ä¹‹å¤–çš„ä»ÖM½•地方执行修改—与默认的操作完全相反ã€?

例如åQŒè¦åˆ é™¤åŒ…含单词 "two" 的所有行åQŒæ“ä½œäØ“åQ?


$ sed '/two/ d' sample_one
one 1
three 1
one 1
three 1
$

而要删除除包含单è¯?"two" 的行之外的所有行åQŒåˆ™è¯­æ³•å˜äØ“åQ?


$ sed '/two/ !d' sample_one
two 1
two 1
two 1
$

如果您有一个文件包含一¾pÕdˆ—™å¹ç›®åQŒåƈ且想å¯ÒŽ–‡ä»¶ä¸­çš„æ¯ä¸ªé¡¹ç›®æ‰§è¡Œä¸€ä¸ªæ“ä½œï¼Œé‚£ä¹ˆé¦–先寚w‚£äº›é¡¹ç›®è¿›è¡Œä¸€‹Æ¡æ™ºèƒ½æ‰«æåƈ考虑ž®†è¦åšä»€ä¹ˆæ˜¯å¾ˆé‡è¦çš„ã€‚äØ“äº†ä‹É事情变得更简单,您可以将 sed 与ä“Q意è„P代例½E‹ï¼ˆfor、while、untilåQ‰ç»“合来实现˜q™ä¸€ç›®çš„ã€?

比如è¯ß_¼Œå‡å®šæ‚¨æœ‰ä¸€ä¸ªåä¸?"animals" 的文ä»Óž¼Œå…¶ä¸­åŒ…含以下™å¹ç›®åQ?

pig
horse
elephant
cow
dog
cat

您希望运行以下例½E‹ï¼š


#mcd.ksh
for I in $*
do
echo Old McDonald had a $I
echo E-I, E-I-O
done

¾l“æžœž®†äØ“åQŒæ¯ä¸€è¡Œéƒ½æ˜„¡¤ºåœ?"Old McDonald has a" 的末ž®¾ã€‚虽然对于这些项目的大部分这是正¼‹®çš„åQŒä½†å¯¹äºŽ "elephant" ™å¹ç›®åQŒå®ƒæœ‰è¯­æ³•é”™è¯¯ï¼Œå› äØ“¾l“果应当ä¸?"an elephant" 而不æ˜?"a elephant"。利ç”?sedåQŒæ‚¨å¯ä»¥åœ¨æ¥è‡?shell æ–‡äšg的输å‡ÞZ¸­‹‚€æŸ¥è¿™¿Uè¯­æ³•错误,òq‰™€šè¿‡é¦–先创徏一个命令文件来åÏx—¶åœ°æ›´æ­£å®ƒä»¬ï¼š


#sublist
/ a a/ s/ a / an /
/ a e/ s/ a / an /
/a i/ s / a / an /
/a o/ s/ a / an /
/a u/ s/ a / an /

然后执行以下˜q‡ç¨‹åQ?


$ sh mcd.ksh 'cat animals' | sed -f sublist

现在åQŒåœ¨˜qè¡Œäº?mcd 脚本之后åQŒsed ž®†åœ¨è¾“出中搜索单个字æ¯?a åQˆç©ºæ û|¼Œ"a"åQŒç©ºæ û|¼‰ä¹‹åŽç´§è·Ÿäº†ä¸€ä¸ªå…ƒéŸ³çš„ä»ÀL„ä½ç½®ã€‚如果这¿Uä½¾|®å­˜åœ¨ï¼Œå®ƒå°†æŠŠè¯¥åºåˆ—修改为空æ û|¼Œ"an"åQŒç©ºæ ¹{€‚这样就佉K—®é¢˜æ›´æ­£åŽæ‰æ˜¾½Cºåœ¨å±å¹•上,òq¶ç¡®ä¿å„处的¾~–辑人员在晚上可以更å®ÒŽ˜“地入睡。结果是åQ?

Old McDonald had a pig
E-I, E-I-O
Old McDonald had a horse
E-I, E-I-O
Old McDonald had an elephant
E-I, E-I-O
Old McDonald had a cow
E-I, E-I-O
Old McDonald had a dog
E-I, E-I-O
Old McDonald had a cat
E-I, E-I-O

提前退�

sed 默认è¯Õd–整个文äšgåQŒåƈ只在到达末尾时才停止。不˜q‡ï¼Œæ‚¨å¯ä»¥ä‹É用退出命令提前停止处理。只能指定一条退出命令,而处理将一直持¾l­ç›´åˆ°æ»¡­‘Œ™°ƒç”¨é€€å‡ºå‘½ä»¤çš„æ¡äšgã€?

例如åQŒä»…在文件的前五行上执行替换åQŒç„¶åŽé€€å‡ºï¼š


$ sed '
> /two/ s/1/2/
> /three/ s/1/3/
> 5q' sample_one
one 1
two 2
three 3
one 1
two 2
$

在退出命令之前的™å¹ç›®å¯ä»¥æ˜¯ä¸€ä¸ªè¡ŒåøP¼ˆå¦‚上所½Cºï¼‰åQŒæˆ–者一条查æ‰?匚w…å‘½ä×oåQ?


$ sed '
> /two/ s/1/2/
> /three/ s/1/3/
> /three/q' sample_one
one 1
two 2
three 3
$

您还可以使用退出命令来查看­‘…过一定标准数目的行,òq¶å¢žåŠ æ¯” head 中的功能更强的功能。例如,head 命ä×o允许您指定您惌™¦æŸ¥çœ‹ä¸€ä¸ªæ–‡ä»¶çš„前多ž®‘行—默认数ä¸?10åQŒä½†å¯ä»¥ä½¿ç”¨ä»?1 åˆ?99 çš„ä“Q意一个数字。如果您æƒÏxŸ¥çœ‹ä¸€ä¸ªæ–‡ä»¶çš„å‰?110 行,您用 head 不能实现˜q™ä¸€ç›®çš„åQŒä½†ç”?sed 可以åQ?


sed 110q filename

处理问题

当ä‹Éç”?sed æ—Óž¼Œè¦è®°ä½çš„重要事项是它的工作方式。它的工作方式是åQšè¯»å…¥ä¸€è¡Œï¼Œåœ¨è¯¥è¡Œä¸Šæ‰§è¡Œå®ƒå·²çŸ¥è¦æ‰§è¡Œçš„æ‰€æœ‰ä“Q务,然后¾l§ç®‹å¤„理下一行。每一行都受给定的每一个编辑命令的影响ã€?

如果您的操作™åºåºæ²¡æœ‰ååˆ†å½Õdº•地考虑清楚åQŒé‚£ä¹ˆè¿™å¯èƒ½ä¼šå¾ˆéºÈƒ¦ã€‚例如,假定您需要将所有的 "two" ™å¹ç›®ä¿®æ”¹ä¸?"three"åQŒç„¶åŽå°†æ‰€æœ‰çš„ "three" 修改ä¸?"four"åQ?


$ sed '
> /two/ s/two/three/
> /three/ s/three/four/' sample_one
one 1
four 1
four 1
one 1
four 1
four 1
four 1
$

最初读取的 "two" è¢«ä¿®æ”¹äØ“ "three"。然后它满èƒöä¸ÞZ¸‹ä¸€‹Æ¡ç¼–辑徏立的准则åQŒä»Žè€Œå˜ä¸?"four"。最¾lˆçš„¾l“果不是惌™¦çš„结果—现在除äº?"four" 没有别的™å¹ç›®äº†ï¼Œè€Œæœ¬æ¥åº”该有 "three" å’?"four"ã€?

当执行这¿Uæ“ä½œæ—¶åQŒæ‚¨å¿…须非常用心地注意指定操作的方式åQŒåƈ按某¿Ué¡ºåºæ¥å®‰æŽ’它们åQŒä‹É得操作之间不会互相媄响。例如:


$ sed '
> /three/ s/three/four/
> /two/ s/two/three/' sample_one
one 1
three 1
four 1
one 1
three 1
three 1
four 1
$

˜q™éžå¸¸æœ‰æ•ˆï¼Œå› äØ“ "three" 值在 "two" 变成 "three" 之前得到修改ã€?

标签和注�

可以åœ?sed 脚本文äšg中放¾|®æ ‡½{¾ï¼Œ˜q™æ ·ä¸€æ—¦æ–‡ä»¶å˜å¾—庞大,可以更容易地说明正在发生的事情。存在各¿Uå„样与˜q™äº›æ ‡ç­¾ç›¸å…³çš„命令,它们包括åQ?
接下来的步骤

讉K—®òq¶æ”¶è—?Linux 技术中å¿?

阅读 Dale Dougherty å’?Arnold Robbins 的著ä½?sed & awk, 2nd Edition åQˆO'Reilly & Associates 出版½C¾ï¼‰ã€?

: 冒号表示一个标½{‘֐¿U°ã€‚例如:


:HERE

以冒号开始的标签可以ç”?"b" å’?"t" 命ä×o处理ã€?

b {label} 充当 "goto" 语句的作用,ž®†å¤„理发送至前面有一个冒åïLš„æ ‡ç­¾ã€‚例如,


b HERE

ž®†å¤„理发送给è¡?


:HERE

如果紧跟 b 之后没有指定ä»ÖM½•标签åQŒåˆ™å¤„理转至脚本文äšg的末ž®¾ã€?

t {label} 只要自上‹Æ¡è¾“入行或执行一‹Æ?"t" 命ä×o以来˜q›è¡Œäº†æ›¿æ¢æ“ä½œï¼Œž®Þp{臌™¯¥æ ‡ç­¾ã€‚å’Œ "b" ä¸€æ øP¼Œå¦‚果没有¾l™å®šæ ‡ç­¾åï¼Œåˆ™å¤„理è{臌™„šæœ¬æ–‡ä»¶çš„æœ«å°¾ã€?

# ½W¦å·ä½œäؓ一行的½W¬ä¸€ä¸ªå­—½W¦å°†ä½¿æ•´è¡Œè¢«å½“作注释处理。注释行与标½{¾ä¸åŒï¼Œä¸èƒ½ä½¿ç”¨ b æˆ?t 命ä×o来è{到注释行上ã€?/div>


]]>重要的几个热键[Tab], [ctrl]-c, [ctrl]-dhttp://www.aygfsteel.com/lingy/archive/2009/05/24/277640.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Sun, 24 May 2009 01:56:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/05/24/277640.html在ç‘ô¾l­åŽé¢çš„章节之前åQŒè¿™é‡Œå¾ˆéœ€è¦è·Ÿå¤§å®¶å†æ¥æŠ¥å‘Šä¸€ä»¶äº‹åQŒé‚£ž®±æ˜¯æˆ‘们的文字模式里头具有很多的功能按键åQ?˜q™äº›æŒ‰é”®å¯ä»¥è¾…助我们˜q›è¡ŒæŒ‡ä×o的编写与½E‹åºçš„中断呢åQè¿™å‡ ä¸ªæŒ‰é”®è¯·å¤§å®¶åŠ¡å¿…è¦è®îC½çš„!很重要喔åQ?br />• [Tab] 按键
[Tab] 按键ž®±æ˜¯åœ¨é”®ç›˜çš„大写灯切换按é”?[Caps Lock])上面的那个按键! 在各¿U?Unix-Like çš?Shell 当中åQŒè¿™ä¸?[Tab] 按键½Ž—是 Linux çš?Bash shell 最‹‚’的功能之一了! 他具有『命令补全』与『档案补齐』的功能喔!可以让我们少打很多字åQŒä½†é‡ç‚¹æ˜¯ï¼Œ 可以避免我们打错指ä×o或文件名¿U°å‘¢åQå¾ˆ‹‚’吧åQä½†æ˜?[Tab] 按键在不同的地方输入åQŒä¼šæœ‰ä¸ä¸€æ ïLš„¾l“果喔! 我们举下面的例子来说明。上一ž®èŠ‚æˆ‘ä»¬ä¸æ˜¯æåˆ° cal ˜q™ä¸ªæŒ‡ä×o吗?如果我在指ä×o列输å…?ca 再按两次 [tab] 按键åQŒä¼šå‡ºçŽ°ä»€ä¹ˆè®¯æ¯ï¼Ÿ
[root@linux ~]# ca[tab][tab] <==[tab]按键是紧接在 a 字母后面åQ?br /># 上面çš?[tab] 指的是『按下那个tab键』,不是要您输入 ca[... 的意思喔åQ?br />cadaver callgrind_control capiinit case
cal cancel capinfos cat
calibrate_ppa cancel.cups captoinfo catchsegv
caller capifax card
callgrind capifaxrcvd cardctl
callgrind_annotate capiinfo cardmgr
发现什么事åQŸæ‰€æœ‰ä»¥ ca 为开头的指ä×o都被昄¡¤ºå‡ºæ¥å•¦ï¼å¾ˆä¸é”™å§åQ?那如果你输入 ls -al ~/.bash 两个 [tab] 会出çŽîC»€ä¹ˆï¼Ÿ
[root@linux ~]# ls -al ~/.bash[tab][tab]
.bash_history .bash_logout .bash_profile .bashrc
咦!在该目录下面所有以 .bash 的文件名¿U°éƒ½ä¼šè¢«æ˜„¡¤ºå‡ºæ¥äº†å‘¢åQæ³¨æ„çœ‹ä¸Šé¢ä¸¤ä¸ªä¾‹å­å–”, 我们æŒ?[tab] 按键的地方如果是åœ?command (½W¬ä¸€ä¸ªè¾“入的数据) 后面æ—Óž¼Œä»–就代表着 『命令补全』,如果是接在第二个字以后的åQŒå°±ä¼šå˜æˆã€Žæ¡£æ¡ˆè¡¥é½ã€çš„功能了!
• [Tab] 接在一串指令的½W¬ä¸€ä¸ªå­—çš„åŽé¢ï¼Œåˆ™äØ“å‘½ä×o补全åQ?br />• [Tab] 接在一串指令的½W¬äºŒä¸ªå­—以后æ—Óž¼Œåˆ™äؓ『档案补齐』!
善用 [tab] 按键真的是个很好的习惯!可以让您避免掉很多输入错误的æœÞZ¼šåQï¼åQ?br />• [Ctrl]-c 按键
åœ?Linux 底下åQŒå¦‚果您输入了错误的指ä×o或参敎ͼŒ 有的时候这个指令或½E‹åºä¼šåœ¨¾pȝ»Ÿåº•下『跑不停』这个时候怎么办?别担心, 如果您想让当前的½E‹åºã€ŽåœæŽ‰ã€çš„话,可以输入åQš[Ctrl] ä¸?c 按键 (先按着 [Ctrl] 不放åQŒä¸”再按ä¸?c 按键åQŒæ˜¯¾l„合按键åQ?åQ?那就æ˜?中断目前½E‹åº 的按键啦åQ?举例来说åQŒå¦‚果您输入了ã€?find / -type vbird 』这个指令时åQ?¾pȝ»Ÿä¼šå¼€å§‹è·‘一些东è¥?(先不要理会这个指令串的意ä¹?åQŒæ­¤æ—¶ä½ ¾l™ä»–按下 [Ctrl]-c ¾l„合按键åQŒå˜¿å˜¿ï¼æ˜¯å¦ç«‹åˆ»å‘现˜q™ä¸ªæŒ‡ä×o串被¾lˆæ­¢äº†ï¼ž®±æ˜¯˜q™æ ·çš„æ„æ€å•¦åQ?不过你应该要注意的是åQŒè¿™ä¸ªç»„合键是可以将正在˜qä½œä¸­çš„æŒ‡ä×o中断的, 如果您正在运作比较重要的指ä×oåQŒå¯åˆ«æ€¥ç€ä½¿ç”¨˜q™ä¸ª¾l„合按键喔! ^_^
• [Ctrl]-d 按键
那么 [Ctrl]-d 是什么呢åQŸå°±æ˜?[Ctrl] ä¸?d 按键的组合啊åQè¿™ä¸ªç»„合按键通常代表着åQ?『键盘输入结æ?(End Of File, EOF æˆ?End Of Input)』的意思! 另外åQŒä»–也可以用来取ä»?exit 的输入呢åQä¾‹å¦‚您惌™¦ç›´æŽ¥¼›Õd¼€æ–‡å­—接口åQ?可以直接按下 [Ctrl]-d ž®Þpƒ½å¤Ÿç›´æŽ¥ç¦»å¼€äº?相当于输å…?exit 啊!)ã€?br />æ€ÖM¹‹åQŒåœ¨ Linux 底下åQŒæ–‡å­—接口的功能是很强悍的!要多多的学习他, 而要学习他的基础要诀ž®±æ˜¯......多ä‹É用、多熟悉啦!

]]>
find命ä×ohttp://www.aygfsteel.com/lingy/archive/2009/05/23/277600.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Sat, 23 May 2009 11:49:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/05/23/277600.html

  功能åQšåœ¨ç›®å½•¾l“构中搜索文ä»Óž¼Œòq¶æ‰§è¡ŒæŒ‡å®šçš„æ“ä½œã€‚此命ä×o提供了相当多的查找条ä»Óž¼ŒåŠŸèƒ½å¾ˆå¼ºå¤§ã€?

  语法åQšfind 起始目录 å¯ÀL‰¾æ¡äšg 操作

  说明åQšfind命ä×o从指定的起始目录开始,递归地搜索其各个子目录,查找满èƒöå¯ÀL‰¾æ¡äšgçš„æ–‡ä»¶åÆˆå¯¹ä¹‹é‡‡å–ç›¸å…³çš„æ“ä½œã€?

  该命令提供的å¯ÀL‰¾æ¡äšg可以是一个用逻辑˜qç®—½W¦not、and、or¾l„成的复合条件。逻辑˜qç®—½W¦and、or、notçš„å«ä¹‰äØ“åQ?

  åQ?åQ‰andåQšé€»è¾‘与,在命令中ç”?#8220;-a”表示åQŒæ˜¯¾pȝ»Ÿ¾~ºçœçš„选项åQŒè¡¨½Cºåªæœ‰å½“所¾l™çš„æ¡äšg都满­‘Ïx—¶åQŒå¯»æ‰¾æ¡ä»¶æ‰½Ž—满­‘Ÿë€‚例如:

  $ find –name ’tmp’ –xtype c -user ’inin’

  该命令寻找三个给定条仉™ƒ½æ»¡èƒö的所有文件ã€?

  åQ?åQ‰oråQšé€»è¾‘或,在命令中ç”?#8220;-o”表示。该˜qç®—½W¦è¡¨½Cºåªè¦æ‰€¾l™çš„æ¡äšg中有一个满­‘Ïx—¶åQŒå¯»æ‰¾æ¡ä»¶å°±½Ž—满­‘Ÿë€?

  例如åQ?

  $ find –name ’tmp’ –o –name ’mina*’

  该命令查询文件名ä¸?#8217;tmp’或是匚w…’mina*’的所有文件ã€?

  åQ?åQ‰notåQšé€»è¾‘非,在命令中ç”?#8220;åQ?#8221;表示。该˜qç®—½W¦è¡¨½CºæŸ¥æ‰¾ä¸æ»¡èƒö所¾l™æ¡ä»¶çš„æ–‡äšgã€?

  例如åQ?

  $ find ! –name ’tmp’

  该命令查询文件名不是’tmp’的所有文件ã€?

  需要说明的是:当ä‹É用很多的逻辑选项æ—Óž¼Œå¯ä»¥ç”¨æ‹¬åähŠŠ˜q™äº›é€‰é¡¹æ‹¬è“væ¥ã€‚äØ“äº†é¿å…Shell本èínå¯ÒŽ‹¬å·å¼•赯‚¯¯è§£ï¼Œåœ¨è¯å·å‰éœ€è¦åŠ è½¬ä¹‰å­—ç¬¦“\\”来去除括åïLš„æ„ä¹‰ã€?

  例:$ find \\åQ?#8211;name ’tmp’ –xtype c -user ’inin’ \\åQ?å¯ÀL‰¾æ¡äšg有以下选项åQ?

  首先åQŒä¸‹åˆ—各个选项中的n值可以有三种输入方式åQŒå‡è®¾nä¸?0åQŒåˆ™åQ?

  +20 表示20以后åQ?1åQ?2åQ?3½{‰ï¼‰

  -20 表示20以前åQ?9åQ?8åQ?7½{‰ï¼‰

  20 表示正好�0

  1. 以名¿U°å’Œæ–‡äšg属性查找ã€?

  - name ’字串’ 查找文äšg名匹配所¾l™å­—串的所有文ä»Óž¼Œå­—串内可用通配½W?ã€?、[ ]ã€?

  - lname ’字串’ 查找文äšg名匹配所¾l™å­—串的所有符号链接文ä»Óž¼Œå­—串内可用通配½W?ã€?、[ ]ã€?

  -gid n 查找属于IDå·äØ“n的用æˆïL»„的所有文件ã€?

  -uid n 查找属于IDå·äØ“n的用æˆïLš„æ‰€æœ‰æ–‡ä»¶ã€?

  -group ’字串’ 查找属于用户¾l„名为所¾l™å­—串的所有的文äšgã€?

  -user ’字串’ æŸ¥æ‰¾å±žäºŽç”¨æˆ·åäØ“æ‰€¾l™å­—串的所有的文äšgã€?

  -empty 查找大小ä¸?的目录或文äšgã€?

  -path ’字串’ 查找路径名匹配所¾l™å­—串的所有文ä»Óž¼Œå­—串内可用通配½W?ã€?、[ ]ã€?

  -perm 权限 查找å…ähœ‰æŒ‡å®šæƒé™çš„æ–‡ä»¶å’Œç›®å½•åQŒæƒé™çš„表示可以å¦?11åQ?44ã€?

  -size n[bckw] 查找指定文äšg大小的文ä»Óž¼Œn后面的字½W¦è¡¨½Cºå•位,¾~ºçœä¸ºbåQŒä»£è¡?12字节的块ã€?

  -type x 查找¾cÕdž‹ä¸ºx的文ä»Óž¼Œxä¸ÞZ¸‹åˆ—å­—½W¦ä¹‹ä¸€åQ?

  b 块设备文�

  c 字符讑֤‡æ–‡äšg

  d 目录文äšg

  p 命名½Ž¡é“åQˆFIFOåQ?

  f 普通文�

  l ½W¦å·é“¾æŽ¥æ–‡äšgåQˆsymbolic linksåQ?

  s socketæ–‡äšg

  -xtype x ä¸?type基本相同åQŒä½†åªæŸ¥æ‰„¡¬¦å·é“¾æŽ¥æ–‡ä»¶ã€?

  2. ä»¥æ—¶é—´äØ“æ¡äšg查找

  - amin n 查找n分钟以前被访问过的所有文件�

  - atime n 查找n天以前被讉K—®˜q‡çš„æ‰€æœ‰æ–‡ä»¶ã€?

  - cmin n 查找n分钟以前文äšg状态被修改˜q‡çš„æ‰€æœ‰æ–‡ä»¶ã€?

  - ctime n 查找n天以前文件状态被修改˜q‡çš„æ‰€æœ‰æ–‡ä»¶ã€?

  - mmin n 查找n分钟以前文äšg内容被修改过的所有文件ã€?

  - mtime n 查找n天以前文件内容被修改˜q‡çš„æ‰€æœ‰æ–‡ä»¶ã€?

  3. 可执行的操作

  - exec 命ä×o名称 {} 对符合条件的文äšg执行所¾l™çš„Linux 命ä×oåQŒè€Œä¸è¯¢é—®ç”¨æˆ·æ˜¯å¦éœ€è¦æ‰§è¡Œè¯¥å‘½ä×o。{}表示命ä×o的参数即为所扑ֈ°çš„æ–‡ä»Óž¼›å‘½ä×o的末ž®‘Ö¿…™åÖM»¥“ \\åQ?#8221;¾l“束ã€?

  - ok 命ä×o名称 { } 对符合条件的文äšg执行所¾l™çš„Linux 命ä×oåQŒä¸Žexec不同的是åQŒå®ƒä¼šè¯¢é—®ç”¨æˆäh˜¯å¦éœ€è¦æ‰§è¡Œè¯¥å‘½ä×oã€?

  - ls 详细列出所扑ֈ°çš„æ‰€æœ‰æ–‡ä»¶ã€?

  - fprintf æ–‡äšgå?ž®†æ‰¾åˆ°çš„æ–‡äšg名写入指定文件ã€?

  - print åœ¨æ ‡å‡†è¾“å‡ø™®¾å¤‡ä¸Šæ˜„¡¤ºæŸ¥æ‰¾å‡ºçš„æ–‡äšg名ã€?

  - printf 格式 格式的写法请参考有关C语言的书�

  ä¾?åQšæŸ¥æ‰‘Ö½“前目录中所有以main开头的文äšgåQŒåƈ昄¡¤º˜q™äº›æ–‡äšg的内宏V€?

  $ find . - name ‘main*’ - exec more {} \\;

  ä¾?åQšåˆ é™¤å½“前目录下所有一周之内没有被讉K—®˜q‡çš„a .outæˆ?.oæ–‡äšgã€?

  $ find . \\åQ? name a.out - o - name ‘*.o’\\åQ‰\\

  > - atime +7 - exec rm {} \\;

  说明如下åQ?命ä×o中的“.”表示当前目录åQŒæ­¤æ—¶findž®†ä»Žå½“前目录开始,逐个在其子目录中查找满èƒö后面指定条äšg的文件。\\åQˆå’Œ\\åQ‰è¡¨½Cºæ‹¬åøP¼ˆåQ‰ï¼Œå…¶ä¸­çš?#8220;\\”¿UîCؓ转义½W¦ã€‚之所以这样写是由于对Shell而言åQŒï¼ˆå’Œï¼‰å¦æœ‰ä¸åŒçš„含义,而不是这里的用于¾l„合条äšg的用途ã€?#8220;- name a.out”是指要查扑֐ä¸ºa.out的文ä»Óž¼›“- name ‘*.o’”是指要查找所有名字以 .o¾l“尾的文件。这两个- name之间çš? o表示逻辑或(oråQ‰ï¼ŒåÏxŸ¥æ‰‘֐å­—䨓a.out或名字以 .o¾l“尾的文ä»Óž¼Œfind在当前目录及其子目录下找到这佯的文äšg之后åQŒå†˜q›è¡Œåˆ¤æ–­åQŒçœ‹å…¶æœ€åŽè®¿é—®æ—¶é—´æ˜¯å¦åœ¨7天以前(条äšgåQatime +7åQ‰ï¼Œè‹¥æ˜¯åQŒåˆ™å¯¹è¯¥æ–‡äšg执行命ä×ormåQ? exec rm{ }\\;åQ‰ã€‚其中{ }代表当前查到的符合条件的文äšg名,\\åQ›åˆ™æ˜¯è¯­æ³•所要求的。上˜q°å‘½ä»¤ä¸­½W¬ä¸€è¡Œçš„æœ€åŽä¸€ä¸ª\\是箋行符。当命ä×o太长而在一行写不下æ—Óž¼Œå¯è¾“入一个\\åQŒä¹‹åŽç³»¾lŸå°†æ˜„¡¤ºä¸€ä¸?gt;åQŒæŒ‡½Cºç”¨æˆïL‘ô¾l­è¾“入命令ã€?

  locate命ä×o

  locate命ä×o用于查找文äšgåQŒå®ƒæ¯”find命ä×o的搜索速度快,它需要一个数据库åQŒè¿™ä¸ªæ•°æ®åº“由每天的例行工作åQˆcrontabåQ‰ç¨‹åºæ¥å»ºç«‹ã€‚当我们建立好这个数据库后,ž®±å¯ä»¥æ–¹ä¾¿åœ°æ¥æœå¯ÀL‰€éœ€æ–‡äšg了ã€?

  该命令的一般åÅžå¼äØ“åQ?

  locate 相关�

  例如åQšæŸ¥æ‰„¡›¸å…›_­—issue

  $ locate issue

  /etc/issue

  /etc/issue.net

  /usr/man/man5/issue.5

  /usr/man/man5/issue.net.5 �



]]>
linux kill用法 、killall、pkill、xkillhttp://www.aygfsteel.com/lingy/archive/2009/05/21/274623.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Thu, 21 May 2009 14:34:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/05/21/274623.html一. ¾lˆæ­¢˜q›ç¨‹çš„å·¥å…?kill 、killall、pkill、xkill
¾lˆæ­¢ä¸€ä¸ªè¿›½E‹æˆ–¾lˆæ­¢ä¸€ä¸ªæ­£åœ¨è¿è¡Œçš„½E‹åºåQŒä¸€èˆ¬æ˜¯é€šè¿‡ kill 、killall、pkill、xkill ½{‰è¿›è¡Œã€‚比如一个程序已¾læ­»æŽ‰ï¼Œä½†åˆä¸èƒ½é€€å‡ºï¼Œ˜q™æ—¶ž®±åº”该考虑应用˜q™äº›å·¥å…·ã€?br /> 另外应用的场合就是在服务器管理中åQŒåœ¨ä¸æ¶‰åŠæ•°æ®åº“服务器程序的父进½E‹çš„停止˜qè¡ŒåQŒä¹Ÿå¯ä»¥ç”¨è¿™äº›å·¥å…äh¥¾lˆæ­¢ã€‚äØ“ä»€ä¹ˆæ•°æ®åº“æœåŠ¡å™¨çš„çˆ¶è¿›½E‹ä¸èƒ½ç”¨˜q™äº›å·¥å…·æ€æ­Õd‘¢åQŸåŽŸå› å¾ˆ½Ž€å•,˜q™äº›å·¥å…·åœ¨å¼ºè¡Œç»ˆæ­¢æ•°æ®åº“服务器时åQŒä¼šè®©æ•°æ®åº“产生更多的文件碎片,当碎片达åˆîC¸€å®šç¨‹åº¦çš„æ—¶å€™ï¼Œæ•°æ®åº“就有崩溃的危险。比如mysql服务器最好是按其正常的程序关闭,而不是用pkill mysqld 或killall mysqld˜q™æ ·å±é™©çš„动作;当然对于占用资源˜q‡å¤šçš„æ•°æ®åº“子进½E‹ï¼Œæˆ‘们应该用kill 来杀掉ã€?br /> 1. kill
kill的应用是和ps 或pgrep 命ä×o¾l“合在一起ä‹É用的åQ?/strong>
kill 的用法:
kill åQÖM¿¡å·ä»£ç ï¼½     ˜q›ç¨‹ID
注:信号代码可以省略åQ›æˆ‘们常用的信号代码æ˜?-9 åQŒè¡¨½Cºå¼ºåˆ¶ç»ˆæ­?/font>åQ?/strong>
举例åQ?br /> [root@localhost ~]# ps auxf |grep httpd
root 4939 0.0 0.0 5160 708 pts/3 S+ 13:10 0:00 \_ grep httpd
root 4830 0.1 1.3 24232 10272 ? Ss 13:02 0:00 /usr/sbin/httpd
apache 4833 0.0 0.6 24364 4932 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4834 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4835 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4836 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4840 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
我们查看httpd 服务器的˜q›ç¨‹åQ›æ‚¨ä¹Ÿå¯ä»¥ç”¨pgrep -l httpd 来查看;

我们看上面例子中的第二列åQŒå°±æ˜¯è¿›½E‹PID的列åQŒå…¶ä¸?font color="#0000ff">4830
是httpd服务器的父进½E‹ï¼Œä»?833åQ?840的进½E‹éƒ½æ˜¯å®ƒ4830的子˜q›ç¨‹åQ›å¦‚果我们杀掉父˜q›ç¨‹4830的话åQŒå…¶ä¸‹çš„子进½E‹ä¹Ÿä¼šè·Ÿç€æ­ÀLމåQ?br /> [root@localhost ~]# kill 4840 注:杀æŽ?840˜q™ä¸ª˜q›ç¨‹åQ?br /> [root@localhost ~]# ps -auxf |grep httpd 注:查看一下会有什么结果?是不是httpd服务器仍在运行?
[root@localhost ~]# kill 4830 注:杀掉httpd的父˜q›ç¨‹åQ?br /> [root@localhost ~]# ps -aux |grep httpd 注:查看httpd的其它子˜q›ç¨‹æ˜¯å¦å­˜åœ¨åQŒhttpd服务器是否仍在运行?

对于僵尸˜q›ç¨‹åQŒå¯ä»¥ç”¨kill -9 来强制终止退出;

比如一个程序已¾lå½»åº•死掉,如果kill 不加信号强度是没有办法退出,最好的办法ž®±æ˜¯åŠ ä¿¡å·å¼ºåº?-9 åQŒåŽé¢è¦æŽ¥æ€çˆ¶è¿›½E‹ï¼›æ¯”如åQ?br /> [root@localhost ~]# ps aux |grep gaim
beinan 5031 9.0 2.3 104996 17484 ? S 13:23 0:01 gaim
root 5036 0.0 0.0 5160 724 pts/3 S+ 13:24 0:00 grep gaim
�[root@localhost ~]# pgrep -l gaim
5031 gaim
[root@localhost ~]# kill -9 5031
2. killall
killall 通过½E‹åºçš„名字,直接杀æ­ÀL‰€æœ‰è¿›½E‹ï¼Œå’׃»¬½Ž€å•说一下就行了ã€?br /> 用法åQškillall 正在˜qè¡Œçš„程序名
killall 也和ps或pgrep ¾l“合使用åQŒæ¯”较方便;通过ps或pgrep 来查看哪些程序在˜qè¡ŒåQ?br /> 举例åQ?br /> [root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# killall gaim
3. pkill
pkill å’Œkillall 应用æ–ÒŽ³•差不多,也是直接杀死运行中的程序;如果您想杀掉单个进½E‹ï¼Œè¯ïL”¨kill 来杀掉ã€?br /> 应用æ–ÒŽ³•åQ?br /> #pkill 正在˜qè¡Œçš„程序名

举例åQ?br /> [root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# pkill gaim
4. xkill
xkill 是在桌面用的杀æ­Õd›¾å½¢ç•Œé¢çš„½E‹åºã€‚比如当firefox 出现崩溃不能退出时åQŒç‚¹é¼ æ ‡ž®Þpƒ½æ€æ­»firefox 。当xkill˜qè¡Œæ—¶å‡ºæ¥å’Œä¸ªäh脑骨的图标,哪个囑ÖÅž½E‹åºå´©æºƒä¸€ç‚¹å°±OK了。如果您想终止xkill åQŒå°±æŒ‰å³é”®å–消;
xkill 调用æ–ÒŽ³•åQ?br /> [root@localhost ~]# xkill
äº?Linuxçš„kill命ä×o与信åähާåˆ?/font>
信号是用来与守护½E‹åºå’Œè¿›½E‹é€šä¿¡çš„。ä“Q何活动ä“Q务都是一个进½E‹ï¼Œè€Œå®ˆæŠ¤ç¨‹åºæ˜¯½{‰å¾…å¯ÒŽŸäº›äº‹ä»¶åšå‡ºååº”或者按照日½E‹å®‰æŽ’执行ä“Q务的后台服务。一个程序必™åÀLœ‰å»ºåœ¨å…¶ä¸­çš„信号处理程序用于捕获和应答信号。在LINUX中的signal参考指南解释了各种不同信号和这些信åïLš„用途。信åäh˜¯ç”?#8220;kill”命ä×o发出的。kill -l命ä×o可以昄¡¤ºä¸€ä¸ªå¯ç”¨ä¿¡å·åˆ—表及其编受÷€?br /> 所有的守护½E‹åºå’Œè¿›½E‹éƒ½æœ‰ä¸€ä¸ªè¿›½E‹ID(PID)åQŒä¾‹å¦‚ä‹É用ps命名所昄¡¤ºçš„内容:
$ ps aux
USER PID %CPU %MEM TTY STAT COMMAND
root 1 0.0 0.1 ? S init [2]
105 7783 0.0 0.2 ? Ss /usr/bin/dbus-daemon --system
hal 7796 0.0 0.7 ? Ss /usr/sbin/hald
postfix 7957 0.0 0.2 ? S qmgr -l -t fifo -u -c
nagios 8371 0.0 0.2 ? SNs /usr/sbin/nagios /etc/nagios/nagios.cfg
˜q™ä¸ªè¾“出是经˜q‡ç®€åŒ–的。你在系¾lŸä¸­å¯ä»¥çœ‹åˆ°æ›´å¤šçš„行和栏目。如果某些进½E‹æ¶ˆè€—了你的全部CPU或者内存,你可以在˜q™ä¸ªè¾“出çš?CPUå’?MEM列中发现它们。找到失控的˜q›ç¨‹çš„一¿Uæ›´å¿«æ·çš„æ–¹æ³•是使用top命ä×oåQŒå› ä¸ºæŒ‰ç…§é»˜è®¤çš„讄¡½®åQŒä‹É用占用CPU资源最多的˜q›ç¨‹åœ¨æœ€ä¸Šé¢æ˜„¡¤ºã€‚我们可以ä‹É用一æ?#8220;yes”命ä×o来测试一ä¸?
$ yes carla is teh awesum
˜q™ä¸ªå‘½ä×ož®†ä»¥å¾ˆé«˜çš„速度反复昄¡¤º“carla is teh awesum”åQŒç›´åˆîC½ åœæ­¢å®ƒè¿è¡Œã€‚è¿™ž®†ä‹Éä½ çš„CPU使用率达到警戒线ã€?br /> $ top
...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12144 carla 25 0 31592 17m 13m R 93.4 3.5 0:50.26 konsole
22236 carla 15 0 2860 468 400 S 4.3 0.1 0:00.97 yes
 分析一下这个结果,你会发现一些有­‘£çš„事,你会发现åQŒå ç”¨CPU最多的½E‹åºæ˜¯konsole虚拟¾lˆç«¯½E‹åºåQŒè€Œä¸æ˜?#8220;yes”命ä×oåQŒè¿™æ˜¯å› ä¸?#8220;yes”命ä×o是在konsole¾lˆç«¯½E‹åºä¸­è¿è¡Œçš„。如果在一ä¸?#8220;真正çš?#8221;控制å?按Ctrl+alt+f2é”?中运行同æ ïLš„命ä×o序列åQŒä½ ž®†çœ‹åˆ?#8220;yes”命ä×o被排在第一位ã€?br /> 有许多停æ­?#8220;yes”命ä×o˜qè¡Œçš„æ–¹å¼ã€‚如果你要回到运行它的shell中,按CTRL+c键就可以了。或者你可以在另一个shell中用“kill”命ä×o停止“yes”命ä×o的运行,Kill命ä×o后面跟PID或者命令名¿UŽÍ¼Œå¦‚下如示:
$ kill 22236
或�br /> $ killall yes
按CTRL+c键发å‡ÞZ¸€ä¸ªSIGINTåQˆä¿¡å?åQ‰ï¼Œ˜q™ä¸ªä¿¡å·æ˜¯é”®ç›˜è¦æ±‚取得控制权的中断信受÷€‚killå’Œkillall˜q™ä¸¤ä¸ªå‘½ä»¤æŒ‰ç…§é»˜è®¤çš„讄¡½®éƒ½å‘å‡ÞZ¸€ä¸ªSIGTERM信号(¾~–号15)。程序中可以讄¡½®å¯¹SIGTERM信号(15)是捕捉或者忽略,或者以不同的方式解释。因此,如果你的½E‹åºå¯¹äºŽKILL命ä×o的反应与你预期不同,很可能是被KILL的目标程序的问题ã€?br /> ¾lˆæ­¢ä¸€ä¸ªçˆ¶˜q›ç¨‹é€šå¸¸ä¹Ÿç»ˆæ­¢äº†å®ƒçš„子进½E‹ã€‚不˜q‡ï¼Œæƒ…况òq¶ä¸æ€ÀL˜¯å¦‚此。你知道子进½E‹æ˜¯ä»€ä¹ˆå—?使用ps命ä×o加上-f选项ž®±å¯ä»¥çœ‹åˆŽÍ¼Œå¦‚下所½C?
$ ps axf
22371 ? R 2:35 _ konsole [kdeinit]
22372 pts/3 Ss 0:00 | _ /bin/bash
24322 pts/3 S+ 0:00 | | _ yes carla is teh awesum
22381 pts/4 Rs 0:00 | _ /bin/bash
24323 pts/4 R+ 0:00 | | _ ps axf
现在åQŒå›žåˆ°SIGHUP的话é¢?br /> SIGHUP的发éŸÏx˜¯“sig-hup”åQŒæ˜¯signal hangup的羃写,含义æ˜?#8220;中止信号”。你如何发送一个SIGHUP信号å‘?˜q™é‡Œæœ‰å‡ ¿Uæ–¹å¼?
# kill -HUP [pid]
# killall -HUP [process-name]
# kill -1 [pid]
# killall -1 [process-name]
å› æ­¤åQŒä½ å¯ä»¥ä½¿ç”¨PID或者名¿UŽÍ¼Œä¿¡å·åç§°æˆ–è€…å·ç ã€‚é‚£ä¹ˆäØ“ä»€ä¹ˆè¦˜q™æ ·åšè€Œä¸ä½¿ç”¨/etc/init.d/foo命ä×o重新启动å‘?使用它们自己的init(初始åŒ?æ–‡äšgæ¥æŽ§åˆ¶æœåŠ¡æ˜¯ä¼˜å…ˆé€‰æ‹©çš„æ–¹å¼ï¼Œå› äØ“˜q™äº›æ–‡äšg通常包含健全和错误检查以及额外的功能。ä‹Éç”?#8220;kill”命ä×o和信åïLš„主要原因是尽可能明确地终止挂起和失控的进½E‹ï¼Œè€Œä¸å¿…重新启动或者登出ã€?br /> ¾lˆæ­¢˜q›ç¨‹
正如你在关于信号的man page中所看到的,有十几种控制˜q›ç¨‹çš„æ–¹æ³•。下面是一些常用的æ–ÒŽ³•:
kill -STOP [pid]
发送SIGSTOP (17,19,23)停止一个进½E‹ï¼Œè€Œåƈ不消灭这个进½E‹ã€?br /> kill -CONT [pid]
发送SIGCONT (19,18,25)重新开始一个停止的˜q›ç¨‹ã€?br /> kill -KILL [pid]
发送SIGKILL (9)å¼ø™¿«˜q›ç¨‹ç«‹å³åœæ­¢åQŒåƈ且不实施清理操作ã€?br /> kill -9 -1
¾lˆæ­¢ä½ æ‹¥æœ‰çš„全部˜q›ç¨‹ã€?br /> SIGKILLå’ŒSIGSTOP信号不能被捕捉、封锁或者忽略,但是åQŒå…¶å®ƒçš„信号可以。所以这是你的终极武器ã€?br /> Bash shellçš„Kil命ä×ol
Bash外壳包含一个内¾|®çš„kill命ä×oåQŒå½“执行下面命ä×o:
$ type -all kill
kill is a shell built-in
kill is /bin/kill
命ä×o的结果表明有两个kill命ä×oåQŒä¸€ä¸ªæ˜¯BASH的内¾|®å‘½ä»¤ï¼Œå¦ä¸€ä¸ªæ˜¯/bin/kill可执行程序。一般来说这两个命ä×o不太可能遇到冲突的情况,不过åQŒå¦‚果你¼‹®å®žé‡åˆ°äº†kill命ä×oè¡ŒäØ“å¼‚å¸¸æ—Óž¼Œä½ å¯ä»¥æ˜Ž¼‹®çš„æŒ‡å®š/bin/kill命ä×oã€?br /> 你一定要˜q›ä¸€æ­¥æŸ¥é˜…下面的资源中列出的参考资源来了解Linux中killçš„å¦™ç”¨ï¼Œå› äØ“˜q™æ˜¯ä½ è¿›å…¥ç»´æŠ¤Linux¾pȝ»Ÿé¢†åŸŸçš„é—¨¼œ¨ã€‚这些知识能够让你像做外¿U‘手术一样对¾pȝ»Ÿ˜q›è¡Œ¾l´æŠ¤åQŒè€Œä¸ç”¨åœ¨é‡åˆ°é—®é¢˜æ—¶æ¯ä¸€‹Æ¡éƒ½é‡æ–°å¯åЍ¾pȝ»ŸåQŒå°±åƒæˆ‘们知道的某些íy©è„šçš„æ“ä½œç³»¾lŸé‚£æ —÷€?br /> 资源
Linux Cookbook一书的½W¬ä¸ƒç«?#8220;开始和¾lˆæ­¢Linux”
bash (1) - GNU Bourne-Again Shell
yes (1) - 在被¾lˆæ­¢å‰åå¤æ‰“印字½W?br /> signal (7) - 可用信号列表
ps (1) - 报告当前˜q›ç¨‹çš„å¿«ç…?br /> kill (1) - 向一个进½E‹å‘å‡ÞZ¿¡å?br /> killall (1) - 按名字消灭进½E?br /> pkill (1) - æ ÒŽ®åå­—å’Œå…¶å®ƒå±žæ€§æŸ¥çœ‹æˆ–è€…å‘å‡ø™¿›½E‹ä¿¡å?br /> skill (1) - 发送一个信åähˆ–者报告进½E‹çжæ€?br /> xkill (1) - 按照X资源消灭一个客æˆïL¨‹åº?br />
http://hi.baidu.com/zhujiawei/blog/item/9ed008f3154be2cd0b46e003.html


]]>
Linux下Kill多个˜q›ç¨‹çš„妙æ‹?/title><link>http://www.aygfsteel.com/lingy/archive/2009/05/21/274478.html</link><dc:creator>æž—å…‰ç‚?/dc:creator><author>æž—å…‰ç‚?/author><pubDate>Thu, 21 May 2009 14:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/lingy/archive/2009/05/21/274478.html</guid><description><![CDATA[<h2>[转帖]Linux下Kill多个˜q›ç¨‹çš„妙æ‹?/h2> <div class="wmqeeuq" id="postmessage_102542" class="t_msgfont">  工作中经帔Rœ€è¦Kill多个˜q›ç¨‹åQŒå¦‚果这些进½E‹æœ‰å…±åŒçš„特点,ž®±å¯ä»¥ç”¨ä¸€æ¡å‘½ä»¤Kill掉它们。比如清除Oracle数据库的所有远½E‹è¿žæŽ¥è¿›½E‹ï¼š<br /> <br /> <br /> <br />   ps -efww|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9<br /> <br /> <br /> <br />   ½Ž¡é“½W?#8220;|”用来隔开两个命ä×oåQŒç®¡é“符左边命ä×o的输å‡ÞZ¼šä½œäØ“½Ž¡é“½W¦å³è¾¹å‘½ä»¤çš„输入。下面说说用½Ž¡é“½W¦è”接è“v来的几个命ä×oåQ?br /> <br />   ps -efww|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9<br /> <br /> <br />   ½Ž¡é“½W?#8220;|”用来隔开两个命ä×oåQŒç®¡é“符左边命ä×o的输å‡ÞZ¼šä½œäØ“½Ž¡é“½W¦å³è¾¹å‘½ä»¤çš„输入。下面说说用½Ž¡é“½W¦è”接è“v来的几个命ä×oåQ?br /> <br /> “ps -efww”是Red Hat 7.0里查看所有进½E‹çš„命ä×o。这时检索出的进½E‹å°†ä½œäؓ下一条命ä»?#8220;grep LOCAL=NO”的输入ã€?br /> <br /> <br />   “grep LOCAL=NO”的输出结果是åQŒæ‰€æœ‰å«æœ‰å…³é”®å­—“LOCAL=NO”的进½E‹ï¼Œ˜q™æ˜¯Oracle数据库中˜qœç¨‹˜qžæŽ¥˜q›ç¨‹çš„共同特炏V€?br /> <br /> <br />   “grep -v grep”是在列出的进½E‹ä¸­åŽ»é™¤å«æœ‰å…³é”®å­?#8220;grep”的进½E‹ã€?br /> <br /> <br />   “cut -c 9-15”是截取输入行的第9个字½W¦åˆ°½W?5个字½W¦ï¼Œè€Œè¿™æ­£å¥½æ˜¯è¿›½E‹å·PIDã€?br /> <br /> <br />   “xargs kill -9”中的xargs命ä×o是用来把前面命ä×o的输出结果(PIDåQ‰ä½œä¸?#8220;kill -9”命ä×o的参敎ͼŒòq¶æ‰§è¡Œè¯¥å‘½ä×oã€?#8220;kill -9”会强行杀掉指定进½E‹ï¼Œ˜q™æ ·ž®±æˆåŠŸæ¸…é™¤äº†oracle的所有远½E‹è¿žæŽ¥è¿›½E‹ã€‚其它类似的ä»ÕdŠ¡åQŒåªéœ€è¦ä¿®æ”?#8220;grep LOCAL=NO”中的关键字部分就可以了ã€?br /> </div> <img src ="http://www.aygfsteel.com/lingy/aggbug/274478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lingy/" target="_blank">æž—å…‰ç‚?/a> 2009-05-21 22:22 <a href="http://www.aygfsteel.com/lingy/archive/2009/05/21/274478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>awk文本处理æ€È»“(转蝲)http://www.aygfsteel.com/lingy/archive/2009/05/19/271482.htmlæž—å…‰ç‚?/dc:creator>æž—å…‰ç‚?/author>Tue, 19 May 2009 02:43:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/05/19/271482.htmlä½œäØ“æŠ€æœ¯æ”¯æŒå·¥½E‹æˆ‘们最最¾lå¸¸çš„工作就是经常碰到要处理文本文äšgåQŒä¸½Ž¡æ˜¯ä»€ä¹ˆæ•°æ®åº“最后都可以导成文本åQŒæˆ‘们就可以对他˜q›è¡Œå¤„理了,˜q™æ ·å³ä‹É你不是对所有数据库操作都很熟悉也可以对他的数据˜q›è¡Œå¤„理了ã€?br />     我们必须的工å…ähœ‰ä¸¤ä¸ªä¸€ä¸ªæ˜¯shell一个是awkåQŒawk对于处理文本文äšg是最最适合的掌握了awk我们ž®±å¯ä»¥å¾ˆæ–¹ä¾¿çš„处理文本文件再借助一些shell命ä×o我们可以很方便得到自己想要的¾l“果。现在从½Ž€å•的例子来æ€È»“一下我觉得会经常碰到的问题ã€?br />    
    awk入门½‹?br />    
    awk入门åQŒæ–‡æœ¬å†…容example1.txt.
   
user1 password1 username1 unit1 10
user2 password2 username2 unit2 20
user3 password3 username3 unit3 30   

    在unix环境中我们可以ä‹É用一下命令来打印出第一åˆ?br />    
[root@mail awk]# awk '{print $1}' example1.txt

    得到的结果是如下åQŒè§£é‡Šä¸€ä¸?'{" 单引号大括号包含awkè¯­å¥æ˜¯äØ“äº†å’Œshell 命ä×o区别åQ?1的意思就是文本文件的½W¬ä¸€åˆ—,正常的awk命ä×o跟随-F参数指定间隔½W¦å·åQŒå¦‚果是½Iºæ ¼æˆ–tab键就可以省略了ã€?br />    
user1
user2
user3 

[root@mail awk]# awk '{if($5>20) {print $1}}' example1.txt

        ˜q™è¡Œå‘½ä×o和上一行比较增加了“if($5>20)”åQŒå¾—到的¾l“æžœæ˜?/p>

user3

˜q™ä¸ªif语句ž®±æ²¡æœ‰å¿…要更详细的解释了吧!ž®±æ˜¯½W?列大äº?0的显½Cºå‡ºæ»¡èƒö条äšg的第一åˆ?/p>

[root@mail awk]# awk '{if($5>20 || $5==10) {print $1}}' example1.txt

user1
user3

在来一个初¾U§çš„又增加了一ä¸?#8220;if($5>20 || $5==10)”    做逻辑判断逻辑判断的三ä¸?#8220;|| && !” 或、与、非三个可以ä»ÀL„åŠ åˆ°é‡Œé¢åQŒè¿™ä¸ªè¯­å¥çš„æ„æ€æ˜¯å¦‚æžœ½W?列大äº?0或者等äº?0的都昄¡¤ºå¤„理åQŒåœ¨æˆ‘们的工作中可能有用户会要求扑ևºæ‰€æœ‰ç©ºé—´å¤§äºŽå¤šž®‘的或者是½Iºé—´½{‰äºŽå¤šå°‘çš„èÌŽæˆïL„¶åŽå†åšæ‰¹é‡ä¿®æ”V€?/p>

if是awk循环中的一个还有其他很多,man awk可以看到åQ?br />    Control Statements
       The control statements are as follows:

              if (condition) statement [ else statement ]
              while (condition) statement
              do statement while (condition)
              for (expr1; expr2; expr3) statement
              for (var in array) statement
              break
              continue
              delete array[index]
              delete array
              exit [ expression ]
              { statements }


学习awk可以¾lå¸¸ä½¿ç”¨ä¸€ä¸‹man awk 可以看到所有的函数和ä‹É用方法ã€?nbsp;  

了解每个½W¦å·çš„æ„ä¹‰æˆ‘们才能更好的使用awkåQŒæœ€å¼€å§‹å…ˆè®îC½å‡ ä¸ªå‘½ä×o知道他可实现的结果我们慢慢的再去理解ã€?br /> ================================================================================

    awk中çñ”½‹?/p>

˜q™é‡Œ™åÞZ¾¿ä»‹ç»ä¸€ä¸‹vi的一个替换命令,现在我们要把example1.txt文本里的½Iºæ ¼éƒ½æ›¿æ¢äØ““:”冒号˜q™é‡Œåœ¨vi里ä‹É用的命ä×ož®±æ˜¯åQ?/p>

%s/ /:/g     

˜q™ä¸ªå‘½ä×o对于使用viçš„äh来说是用得最多的。我们现在做了一个新的文件example2.txtã€?/p>

user1:password1:username1:unit1:10
user2:password2:username2:unit2:20
user3:password3:username3:unit3:30

现在我们来做一个awk脚本åQŒä¹‹å‰éƒ½æ˜¯åœ¨å‘½ä×o行操作,实际上所有的操作在命令行上是可以都实现的åQŒå·²æˆ‘们最¾lå¸¸ä½¿ç”¨çš„æ‰¹é‡æ·»åŠ ç”¨æˆäh¥å¼€å§‹ï¼script1.awk

#!/bin/awk -f   # 当文件有可执行权限的时候你可以直接执行
                # ./script1.awk example2.txt
                # 如果没有以上˜q™è¡Œå¯èƒ½ä¼šå‡ºçŽ°é”™è¯¯ï¼Œæˆ–è€?br />                 # awk -f script1.awk example2.txt 参数f指脚本文ä»?

BEGIN {         # “BEGIN{”是awk脚本开始的地方
    FS=":";     # FS 是在awk里指分割½W¦çš„æ„æ€?br /> }

{                                # 接下来的“{” 是内定wƒ¨åˆ?br />       print "add {";             # 一下都是ä‹É用了一个awk函数print
      print "uid=" $1;
      print "userPassword=" $2;
      print "domain=eyou.com" ;
      print "bookmark=1";
      print "voicemail=1";
      print "securemail=1"
      print "storage=" $5;
      print "}";
      print ".";
}                               # “}”    内容部分¾l“束
END {                           # “END{” ¾l“束部分
    print "exit";
}

执行¾l“æžœ
[root@mail awk]# awk -f script1.awk example2.txt
add {
uid=user1
userPassword=password1
domain=eyou.com
bookmark=1
voicemail=1
securemail=1
storage=10
}
.              
.
.
.
.
.
exit

文本操作ž®±æ˜¯æ›´æ–¹ä¾¿ä¸€äº›ã€?/p>

下面¾l™ä¸¤ä¸ªè¿”回效果一æ ïLš„例子
[root@mail awk]# awk -F: '{print $1"@"$2}' example2.txt
[root@mail awk]# awk -F: '{printf "%s@%s\n",$1,$2}' example2.txt

user1@password1

˜q™é‡Œçš„区别是使用print å’Œprintf的区别,printf格式更自ç”׃¸€äº›ï¼Œæˆ‘们可以更加自由的指定要输出的数据,print会自动在行尾¾l™å‡º½Iºæ ¼åQŒè€Œprintf是需要给å®?\n"的,如果感兴­‘£ä½ å¯ä»¥æŠ?#8220;\n”åŽÀLŽ‰çœ‹ä¸€ä¸‹ç»“æžœã€?s代表字符ä¸?d 代表数字åQŒåŸºæœ¬ä¸Š%séƒ½å¯ä»¥å¤„ç†äº†å› äØ“åœ¨æ–‡æœ¬é‡Œä¸€åˆ‡éƒ½å¯ä»¥çœ‹æˆæ˜¯å­—½W¦ä¸²åQŒä¸åƒC语言½{‰å…¶ä»–语­a€˜q˜è¦åŒºåˆ†æ•°å­—、字½W¦ã€å­—½W¦ä¸²½{‰ã€?/p>


文章出处åQšhttp://www.diybl.com/course/3_program/shell/shelljs/200862/119688.html

awk˜q˜æœ‰ä¸€äº›å¾ˆå¥½çš„函数¾l†ç»†ç ”究一下还是很好用的ã€?br /> ˜q™æ¬¡¼„°åˆ°äº†ä¸€ä¸ªé—®é¢˜å®¢æˆähœ‰ä¸€ä¸ªç”¨æˆ·åˆ—è¡?大概æœ?w用户åQŒä»–有一个有­‘£çš„工作要做åQŒå°±æ˜¯æŠŠæ¯ä¸ªè´¦æˆ·ç›®å½•攑ֈ°ç‰¹å®šçš„目录下åQŒä¾‹å¦?3910011234˜q™ä¸ªç›®å½•要放åˆ?39/10/˜q™ä¸ªç›®å½•ä¸‹ï¼Œä»Žè¿™é‡Œå¯ä»¥çœ‹å‡ø™§„律是手机åïL çš„前三位是二¾U§ç›®å½•名åQŒæ‰‹æœºçš„½W?ã€?为是三çñ”目录名,我们有的ž®±åªæœ‰ä¸€ä¸ªç”¨æˆ·åˆ—表,规律扑ֈ°äº†æˆ‘们现在开始想办法处理吧ã€?/p>

example3.txt

13910011234     
15920312343
13922342134
15922334422
......

½W¬ä¸€æ­¥æ˜¯è¦æ‰¾åˆîC¸€ä¸ªæ–¹æ³•来吧,ž®±æ˜¯è¦æŠŠæ¯ä¸€ä¸ªæ‰‹æœºå·åˆ†å¼€åQŒæœ€åˆå¯èƒ½ä½ ž®×ƒ¼šæƒ›_ˆ°˜q™ä¸ªä¹Ÿæ²¡æœ‰ä“Q何间隔,我们怎么用awk分开他们呢?说实话最初我也考虑äº?0多分钟,后来惌™“v原来学习python的时候有split函数可以分就æƒÏx‰¾æ‰¾awk里是不是有类似的函数åQŒman awk 发现substr ˜q™ä¸ªå‡½æ•°å­ä¸²,

[root@mail awk]# awk '{print substr($1,1,3)}'  example3.txt

[root@mail awk]# awk '{printf "%s/%s\n",substr($1,1,3),substr($1,4,2)}'  example3.txt

[root@mail awk]# awk '{printf "mv %s %s/%s\n",$1,substr($1,1,3),substr($1,4,2)}'  example3.txt

以上的两步的˜q”回自己做一下,最后我们就得到了我们想要的¾l“æžœã€?/p>

mv 13910011234 139/10
mv 15920312343 159/20
mv 13922342134 139/22
mv 15922334422 159/22

把这部分输出拯‚´åˆîC¸€ä¸ªshell脚本里,在数据当前目录下执行ž®±å¯ä»¥äº†åQ?/p>

substr(s, i [, n])      Returns  the at most n-character substring of s
                               starting at i.  If n is omitted, the rest of  s
                               is used.
                              
substr函数解释åQŒs代表我们要处理的字符ä¸ÔŒ¼Œi 是我们从˜q™ä¸ªå­—符串的½W¬å‡ ä¸ªä½¾|®ä¸Šå¼€å§‹ï¼Œn 是我们从开始的位置取多ž®‘个字符。多看看man英文也会有所提高的ã€?nbsp;                             

awk有很多有­‘£çš„函数如果感兴­‘£å¯ä»¥è‡ªå·±åŽ»æŸ¥æŸ¥çœ‹ï¼Œ
man awk
String Functions  字符串函敎ͼŒä¸‘Ö‡ ä¸ªè§‰å¾—常用的函数
    length([s])             Returns  the  length  of  the  string s, or the
                               length of $0 if s is not supplied.
    length 你可以得到字½W¦ä¸²çš„长度,˜q™ä¸ªæ˜¯æ¯”较常用的一个函æ•?nbsp;                        
    split(s, a [, r])       Splits the string s into the  array  a  on  the
                               regular expression r, and returns the number of
                               fields.  If r is omitted, FS is  used  instead.
                               The   array  a  is  cleared  first.   Splitting
                               behaves   identically   to   field   splitting,
                               described above.    
                              
        tolower(str)            Returns  a copy of the string str, with all the
                               upper-case  characters  in  str  translated  to
                               their  corresponding  lower-case  counterparts.
                               Non-alphabetic characters are left unchanged.
                              
        toupper(str)            Returns a copy of the string str, with all  the
                               lower-case  characters  in  str  translated  to
                               their  corresponding  upper-case  counterparts.
  &

nbsp;                            Non-alphabetic characters are left unchanged.
                                                                                    Time Functions  æ—‰™—´å‡½æ•°åQŒæˆ‘们最最常用到的是时间戳转换函数
                                                                                  
strftime([format [, timestamp]])
                 Formats  timestamp  according to the specification in format.
                 The timestamp should be of the same form as returned by  sys-
                 time().   If timestamp is missing, the current time of day is
                 used.  If format is missing, a default format  equivalent  to
                 the output of date(1) is used.  See the specification for the
                 strftime() function in ANSI C for the format conversions that
                 are  guaranteed  to be available.  A public-domain version of
                 strftime(3) and a man page for it come  with  gawk;  if  that
                 version  was  used to build gawk, then all of the conversions
                 described in that man page are available to gawk.                                                                                  
                                                                                  
˜q™é‡Œä¸¾ä¾‹è¯´æ˜Žæ—‰™—´æˆ›_‡½æ•°æ˜¯å¦‚何使用çš?/p>

[root@ent root]# date +%s | awk '{print strftime("%F %T",$0)}'
2008-02-19 15:59:19        

我们先ä‹É用date命ä×o做一个时间戳åQŒç„¶åŽå†æŠŠä»–转换为时é—?nbsp;                                                                                            
˜q˜æœ‰ä¸€äº›æˆ‘们现在可能不¾lå¸¸ç”¨åˆ°çš„函敎ͼŒè¯¦ç»†å†…容man awk 自己可以看一下ã€?br />  Bit Manipulations Functions   二进制函æ•?br />  Internationalization Functions  国际标准化函æ•?br />  
 USER-DEFINED FUNCTIONS      用户也可以自己定义自å·Þqš„函数åQŒæ„Ÿå…´è¶£è‡ªå·±å¯ä»¥å†æ·±å…¥ç ”½I¶ä¸€ä¸‹ã€?br />  
 For example:

              function  f(p, q,     a, b)   # a and b are local
              {
                   ...
              }

              /abc/     { ... ; f(1, 2) ; ... }
 DYNAMICALLY LOADING NEW FUNCTIONS  动态加载新函数åQŒè¿™ä¸ªå¯èƒ½å°±æ›´é«˜¾U§ä¸€äº›äº†åQ?br />  ================================================================================
 awk高çñ”½‹?br />  
 ä¸ç®¡å­¦ä¹ ä»ÖM½•语言åQŒæˆ‘们学到的都是工具åQŒå·¥å…ïLŸ¥é“çš„­‘Šå¤šåQŒæˆ‘们做起工作来ž®Þp¶Šæ–¹ä¾¿åQŒä½†æ˜¯å·¥å…·åœ¨ä½ çš„æ‰‹é‡Œòq¶ä¸ä¸€å®šèƒ½é€ å‡ºå¥½çš„产品åQŒç¼–辑脚本和¾~–程序也是一æ ïLš„重要的是½Ž—法åQŒåˆ«äºÞZ¸çŸ¥é“怎么处理的问题你要知道如何处理。这才能证明你比别äh更高åQŒå·¥å…·åªè¦ä½ æ…¢æ…¢¾lƒä¹ éƒ½ä¼šä½¿ç”¨ã€?br />  
    下面¾l™å¤§å®¶ä¸€ä¸ªæˆ‘è®¤äØ“æ˜¯æ¯”è¾ƒé«˜¾U§çš„问题了,感兴­‘£çš„可以自己再想æƒÏx›´å¥½çš„解决办法ã€?/p>


 

问题是这æ ïLš„æˆ‘们有一个从ldap里导出的文äšgåQŒå®ƒéƒ½æ˜¯ä¸€è¡Œä¸€ä¸ªå­—ŒD‰|¥è¯´æ˜Žçš„,每个用户的数据是已空行分割的。我们必™åÀLŠŠå¯¹åº”çš„uid å’ŒuserPassword扑ևºæ¥è€Œä¸”是对应的ã€?br />    
    例子åQšexample4.txt
   
dn: uid=cailiying,domain=ccc.com.cn,o=mail.ccc.com.cn
uid: cailiying
userPassword:: e21kNX0zREl4VEIwODBJdXZkTnU3WFFtS3lRPT0=
letters: 300
quota: 100

dn: uid=caixiaoning,domain=ccc.com.cn,o=mail.ccc.com.cn
userPassword:: e21kNX1kejFXU0doZWprR2RNYnV5ajJJRWl3PT0=
letters: 300
quota: 100
uid: chenzheng
domain: cqc.com.cn

dn: uid=caixiaoning,domain=ccc.com.cn,o=mail.ccc.com.cn
userPassword:: e21kNX1kejFXU0doZWprR2RNYnV5ajJJRWl3PT0=
letters: 300
quota: 100

dn: uid=caixiaoning,domain=ccc.com.cn,o=mail.ccc.com.cn
userPassword:: e21kNX1kejFXU0doZWprR2RNYnV5ajJJRWl3PT0=
letters: 300
quota: 100
uid: chenzheng
domain: cqc.com.cn
                                                                                    处理˜q™ä¸ªæ–‡æœ¬æˆ‘们需要考虑的问题是åQ?br /> 1 uid  å’ŒuserPassword òq¶ä¸æ˜¯æ¯ä¸€ä¸ªæ®µè½é‡Œéƒ½æœ‰
2 在每一ŒDµé‡Œé¢uidå’ŒuserPassword 先后™åºåºæ˜¯éšæœºçš„
3 有的ŒDµè½é‡Œå¯èƒ½åªæœ‰uid 或者只有userPassword

ä»Žæ–‡æœ¬ä¸Šåˆ†æžå¯ä»¥çœ‹å‡ºå¿…é¡»ä½¿ç”¨çš„é—´éš”ç¬¦åøP¼Œä¸€ä¸ªæ˜¯½Iø™¡ŒåQŒä¸€ä¸ªæ˜¯å†’号ã€?br /> 冒号我们awk -F:ž®±å¯ä»¥äº†åQŒä¸˜q‡ç©ºè¡Œæˆ‘们不好判断现在想到length()˜q™ä¸ªå‡½æ•°åQŒåœ¨unix里空行最多只有一个\n字符åQŒå¦‚果一行字½W¦æ•°ž®äºŽ2我们判断为空行,好现在间隔符号问题解冻I¼Œ½Iø™¡Œåªèƒ½é€šè¿‡å¾ªçŽ¯æ¥å®žçŽ°å¯¹½Iø™¡Œçš„判断ã€?nbsp;                                       

现在¼„°åˆ°çš„另外一个问题是我们的某个段里的信息是不完全的,我们ž®Þp¦æ”‘Ö¼ƒ˜q™æ®µ˜q™å„¿å¦‚何来做åQŒå°±æ˜¯è¦åšä¸¤ä¸ªæ ‡è®°å˜é‡u å’?p  再做一个åó@环如果u  å’?nbsp; p 同事满èƒö我们才输出结果下面的awk脚本ž®±æ˜¯é€šè¿‡˜q™ä¸ªæ€è€ƒæ¥è§£å†³ldif文本的处理的åQ?/p>

# 此脚本的目的是方便我们以后导ldap的其他邮件的数据åQ?br /> # 我们之前使用slapdcat -l 导出所有信息,然后我们需è¦?br /> # 整理出uid  password , ˜q™é‡Œçš„设¾|®éƒ½æ˜¯é»˜è®¤ä»¥":" é—´éš”çš?br /> # 例slapcat -l user.ldif  如果惛_¾—åˆîC¸€ä»½uid å’ŒuserPassword 对应的文ä»Óž¼Œ
# 修改username = "dn"; password = "userpassword"; awk -f ldap2txt.awk user.ldif | grep uid | more  可以查看¾l“æžœ (有可能是多域的邮ä»?
# 如果惛_¾—到domain 所对应的密码,修改username = "dn"; password = "userpassword";  ˜qè¡Œ awk -f ldap2txt.awk user.ldif |grep domain | more


#!/bin/awk -f
# File name: ldap2txt.awk

BEGIN {
        FS = ":";
        username = "uid";
        password = "userPassword";
}

{

        if(length($0) == 0 )
        {
                if (name != "u"  &&  pword != "p")
                {
                        printf ("%s:%s\n", name,pword);
                        name = "u";
                        pword = "p";
                }
        }

        else 
        {
                if ($1 == username)
                {
                name = "u";
                name = $0;
                }
                else if($1 == password)
                {
                pword = "p";
                pword = $0;
                }
        }
}
END {

}

实际上对于学习语­a€é¦–先是熟悉一些常用的函数åQŒç„¶åŽå°±æ˜¯è¯•着去解军_ˆ«äºø™§£å†Œ™¿‡çš„问题,然后自己再思考一下是不是有更好,速度更快的解军_Šžæ³•ï¼Œå®žé™…ä¸Šå¤§éƒ¨åˆ†çš„ç¨‹åºå‘˜éƒ½æ˜¯åœ¨é‡å¤çš„ä½¿ç”¨ç€åˆ«äh好的解决办法åQŒæŠŠåˆ«äh的方法è{å˜äØ“è‡ªå·±çš„æ–¹æ³•ï¼Œž®±æ˜¯åå¤¾lƒä¹ è§£å†³ä¸åŒçš„问题,思考更好的æ–ÒŽ³•åQ?/p>


文章出处åQšhttp://www.diybl.com/course/3_program/shell/shelljs/200862/119688_4.html



]]>
Linux Grep命ä×o使用的详¾l†ä»‹¾l?/title><link>http://www.aygfsteel.com/lingy/archive/2009/05/19/271481.html</link><dc:creator>æž—å…‰ç‚?/dc:creator><author>æž—å…‰ç‚?/author><pubDate>Tue, 19 May 2009 02:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/lingy/archive/2009/05/19/271481.html</guid><description><![CDATA[<p>1. grep½Ž€ä»?<br />   grep (global search regular expression(RE) and print out the line,å…¨é¢æœçƒ¦æ­£åˆ™è¡¨è¾¾å¼åÆˆæŠŠè¡Œæ‰“å°å‡ºæ¥)是一¿Uå¼ºå¤§çš„æ–‡æœ¬æœçƒ¦å·¥å…·åQŒå®ƒèƒ½ä‹É用正则表辑ּæœçƒ¦æ–‡æœ¬åQŒåƈ把匹配的行打印出来。Unixçš„grep家族包括grepã€?egrepå’Œfgrep。egrepå’Œfgrep的命令只跟grep有很ž®ä¸åŒã€‚egrep是grep的扩展,支持更多的re元字½W¦ï¼Œ fgrepž®±æ˜¯ fixed grep或fast grepåQŒå®ƒä»¬æŠŠæ‰€æœ‰çš„字母都看作单词,也就是说åQŒæ­£åˆ™è¡¨è¾‘Ö¼ä¸­çš„元字½W¦è¡¨½Cºå›žå…¶è‡ªíw«çš„字面意义åQŒä¸å†ç‰¹ŒDŠã€‚linux 使用GNU版本的grep。它功能更强åQŒå¯ä»¥é€šè¿‡-Gã€?Eã€?F命ä×o行选项来ä‹É用egrepå’Œfgrep的功能ã€?/p> <p>  grep的工作方式是˜q™æ ·çš„,它在一个或多个文äšg中搜索字½W¦ä¸²æ¨¡æ¿ã€‚如果模板包括空æ û|¼Œåˆ™å¿…™å»è¢«å¼•用åQŒæ¨¡æ¿åŽçš„æ‰€æœ‰å­—½W¦ä¸²è¢«çœ‹ä½œæ–‡ä»¶åã€‚搜索的¾l“果被送到屏幕åQŒä¸å½±å“åŽŸæ–‡ä»¶å†…å®V€?/p> <p>  grep可用于shell脚本åQŒå› ä¸ºgrep通过˜q”回一个状态值来说明搜烦的状态,如果模板搜烦成功åQŒåˆ™˜q”回0åQŒå¦‚果搜索不成功åQŒåˆ™˜q”回1åQŒå¦‚果搜索的文äšg不存在,则返å›?。我们利用这些返回值就可进行一些自动化的文本处理工作ã€?/p> <p>  2. grep正则表达式元字符é›?基本é›?</p> <p>  ^</p> <p>  锚定行的开å§?如:'^grep'匚w…æ‰€æœ‰ä»¥grep开头的行ã€?/p> <p>  $</p> <p>  锚定行的¾l“束 如:'grep$'匚w…æ‰€æœ‰ä»¥grep¾l“尾的行ã€?/p> <p>  匚w…ä¸€ä¸ªéžæ¢è¡Œ½W¦çš„字符 如:'gr.p'匚w…gr后接一个ä“Q意字½W¦ï¼Œç„¶åŽæ˜¯pã€?/p> <p>  *</p> <p>  匚w…é›¶ä¸ªæˆ–多个先前字½W?如:'*grep'匚w…æ‰€æœ‰ä¸€ä¸ªæˆ–多个½Iºæ ¼åŽç´§è·Ÿgrep的行ã€?.*一èµïL”¨ä»£è¡¨ä»ÀL„å­—符ã€?/p> <p>  []</p> <p>  匚w…ä¸€ä¸ªæŒ‡å®šèŒƒå›´å†…的字½W¦ï¼Œå¦?[Gg]rep'匚w…Grepå’Œgrepã€?/p> <p>  [^]</p> <p>  匚w…ä¸€ä¸ªä¸åœ¨æŒ‡å®šèŒƒå›´å†…的字½W¦ï¼Œå¦‚:'[^A-FH-Z]rep'匚w…ä¸åŒ…含A-Rå’ŒT-Z的一个字母开å¤ß_¼Œç´§è·Ÿrep的行ã€?/p> <p>  \(..\)</p> <p>  标记匚w…å­—符åQŒå¦‚'\(love\)'åQŒlove被标è®îCØ“1ã€?/p> <p>  \<</p> <p>  锚定单词的开始,å¦?'\\></p> <p>  锚定单词的结束,å¦?grep\>'匚w…åŒ…含以grep¾l“尾的单词的行ã€?/p> <p>  x\{m\}</p> <p>  重复字符xåQŒm‹Æ¡ï¼Œå¦‚:'0\{5\}'匚w…åŒ…含5个o的行ã€?/p> <p>  x\{m,\}</p> <p>  重复字符x,臛_°‘m‹Æ¡ï¼Œå¦‚:'o\{5,\}'匚w…è‡›_°‘æœ?个o的行ã€?/p> <p>  x\{m,n\}</p> <p>  重复字符xåQŒè‡³ž®‘m‹Æ¡ï¼Œä¸å¤šäºŽn‹Æ¡ï¼Œå¦‚:'o\{5,10\}'匚w…5--10个o的行ã€?/p> <p>  \w</p> <p>  匚w…æ–‡å­—和数字字½W¦ï¼Œä¹Ÿå°±æ˜¯[A-Za-z0-9]åQŒå¦‚åQ?G\w*p'匚w…ä»¥G后跟零个或多个文字或数字字符åQŒç„¶åŽæ˜¯pã€?/p> <p>  \W</p> <p>  \w的反¾|®åŞ式,匚w…ä¸€ä¸ªæˆ–多个非单词字½W¦ï¼Œå¦‚点号句åïL­‰ã€?/p> <p>  \b</p> <p>  单词锁定½W¦ï¼Œå¦? '\bgrepb\'只匹配grepã€?/p> <p>  3. 用于egrepå’?grep -E的元字符扩展é›?/p> <p>  +</p> <p>  匚w…ä¸€ä¸ªæˆ–多个先前的字½W¦ã€‚如åQ?[a-z]+able'åQŒåŒ¹é…ä¸€ä¸ªæˆ–多个ž®å†™å­—母后跟able的串åQŒå¦‚loveable,enable,disable½{‰ã€?/p> <p>  ?</p> <p>  匚w…é›¶ä¸ªæˆ–多个先前的字符。如åQ?gr?p'匚w…gr后跟一个或没有字符åQŒç„¶åŽæ˜¯p的行ã€?/p> <p>  a|b|c</p> <p>  匚w…a或b或c。如åQšgrep|sed匚w…grep或sed</p> <p>  ()</p> <p>  分组½W¦å·åQŒå¦‚åQšlove(able|rs)ov+匚w…loveable或loversåQŒåŒ¹é…ä¸€ä¸ªæˆ–多个ovã€?/p> <p>  x{m},x{m,},x{m,n}</p> <p>  作用同x\{m\},x\{m,\},x\{m,n\}</p> <p><br /> 文章出处åQšDIY部落(http://www.diybl.com/course/3_program/shell/shelljs/20090216/155758.html)</p> <img src ="http://www.aygfsteel.com/lingy/aggbug/271481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lingy/" target="_blank">æž—å…‰ç‚?/a> 2009-05-19 10:38 <a href="http://www.aygfsteel.com/lingy/archive/2009/05/19/271481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">ÑÀ¿ËʯÊÐ</a>| <a href="http://" target="_blank">¸ß´¾ÏØ</a>| <a href="http://" target="_blank">ÀÖÁêÊÐ</a>| <a href="http://" target="_blank">л¯ÏØ</a>| <a href="http://" target="_blank">ƽÁ¹ÊÐ</a>| <a href="http://" target="_blank">ͳ·¬ÊÐ</a>| <a href="http://" target="_blank">ÌìÈ«ÏØ</a>| <a href="http://" target="_blank">ÁúÄÏÏØ</a>| <a href="http://" target="_blank">ÉîÔóÏØ</a>| <a href="http://" target="_blank">ÓÀÄþÏØ</a>| <a href="http://" target="_blank">·î»¯ÊÐ</a>| <a href="http://" target="_blank">ÓãÌ¨ÏØ</a>| <a href="http://" target="_blank">´ó°²ÊÐ</a>| <a href="http://" target="_blank">ÖÐÎ÷Çø</a>| <a href="http://" target="_blank">ãèÂÞÊÐ</a>| <a href="http://" target="_blank">»³À´ÏØ</a>| <a href="http://" target="_blank">¸»Ô£ÏØ</a>| <a href="http://" target="_blank">Æß̨ºÓÊÐ</a>| <a href="http://" target="_blank">´óÌïÏØ</a>| <a href="http://" target="_blank">ÊÙÄþÏØ</a>| <a href="http://" target="_blank">®½­ÏØ</a>| <a href="http://" target="_blank">ºôºÍºÆÌØÊÐ</a>| <a href="http://" target="_blank">¶î¼ÃÄÉÆì</a>| <a href="http://" target="_blank">ËÄÆ½ÊÐ</a>| <a href="http://" target="_blank">ÃÏ´å</a>| <a href="http://" target="_blank">ÄþÏÄ</a>| <a href="http://" target="_blank">½¨Ë®ÏØ</a>| <a href="http://" target="_blank">Î÷³äÏØ</a>| <a href="http://" target="_blank">Æ½Ì¶ÏØ</a>| <a href="http://" target="_blank">²©ÀÖÊÐ</a>| <a href="http://" target="_blank">ɳƺ°ÓÇø</a>| <a href="http://" target="_blank">³±ÖÝÊÐ</a>| <a href="http://" target="_blank">ÊÖ»ú</a>| <a href="http://" target="_blank">лͨÃÅÏØ</a>| <a href="http://" target="_blank">»´ÑôÏØ</a>| <a href="http://" target="_blank">Çø¡£</a>| <a href="http://" target="_blank">½­ÒõÊÐ</a>| <a href="http://" target="_blank">¯»ôÏØ</a>| <a href="http://" target="_blank">ʯÇþÏØ</a>| <a href="http://" target="_blank">ÅìºþÏØ</a>| <a href="http://" target="_blank">¿âÂׯì</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>