??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲日韩久久综合中文字幕,亚洲图片校园春色,亚洲中文字幕无码爆乳av中文http://www.tkk7.com/lingy/category/39871.htmlzh-cnTue, 31 Jan 2012 14:06:07 GMTTue, 31 Jan 2012 14:06:07 GMT60[端口被占?环境起不来]常见试环境问题解决http://www.tkk7.com/lingy/archive/2012/01/31/369065.html林光?/dc:creator>林光?/author>Tue, 31 Jan 2012 03:29:00 GMThttp://www.tkk7.com/lingy/archive/2012/01/31/369065.html大家是否遇到部v环境的时?端口被占?环境起不来的问题呢?遇到q个情况,我们该如何解军_Q?/span>

下面我把我遇到这个问题解决的Ҏ(gu)ȝ下:(x)

现象是这L(fng):

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

解决Ҏ(gu): 杀掉占用的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.tkk7.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.tkk7.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用户登陆输入命o(h)cd /homeQ再用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">知识点:(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">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每行用冒号隔开分ؓ(f)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(h):用户标识?l标识号:注释性描q?ȝ?dShell</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(fng)录到pȝ后运行的命o(h)解释器或某个特定的程序,即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ȝ首先?x)查?/etc/passwd 文gQ看是否有aurora q个账号Q然后确定aurora的UIDQ通过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="ttvjquv" 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)xQuidQgidQ用户名全称Q用L(fng)Ӟ(x)用户所用的shellcd</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? 则ؓ(f)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 的媄(jing)子文Ӟq个文gq不?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内容包括用户?qing)被加密的密码?qing)其他/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密码:(x)上次修改密码的时?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">用户名:(x)用户l密码:(x)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ؓ(f)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.tkk7.com/lingy/aggbug/369064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/lingy/" target="_blank">林光?/a> 2012-01-31 11:28 <a href="http://www.tkk7.com/lingy/archive/2012/01/31/369064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 命o(h)http://www.tkk7.com/lingy/archive/2010/08/17/329113.html林光?/dc:creator>林光?/author>Tue, 17 Aug 2010 08:28:00 GMThttp://www.tkk7.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
有泉?)

数据模型资源手册

需要低烟无卤阻燃电(sh)~料的电(sh)~企?/p>

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

]]>
Vim查找操作http://www.tkk7.com/lingy/archive/2009/09/02/293576.html林光?/dc:creator>林光?/author>Wed, 02 Sep 2009 04:25:00 GMThttp://www.tkk7.com/lingy/archive/2009/09/02/293576.html 

" 搜烦(ch)
/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]\+/ : 搜烦(ch)'A'?#8217;J‘重复两次以上的开头行
/begin\_.*end : 多行匚w
/fred\_s*joe/i : 可以是Q何空白字W包括\n,\t{等
/fred\|joe : 搜烦(ch)fred或者joe
/.*fred\&.*joe : 搜烦(ch)同时包括fred跟joe的行
/\<fred\>/i : 搜烦(ch)独立的单词fred
/\<\d\d\d\d\> : 搜烦(ch)独立?位数?br /> /\D\d\d\d\d\D : 搜烦(ch)6位字W串中间4位数字前后两位不能ؓ(f)数字
/\<\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 : 匚wfred开始到joeQ之间一定得是空白字W?br /> /bugs\(\_.\)*bunny : 匚w所有bugs到bunny的字W串
:h \_ : help
" 查找函数声明Qnmap为normal模式下的键盘映射
:nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>
" 查找多个文g
:bufdo /searchstr/ : 在多个文件缓冲区里执行查?br /> " 更好的多文g查找定位Ҏ(gu)
: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(h)
:%s/\r/\r/g : 转换 DOS 回RW?^M 为真正的回RW?br /> :%s= *$== : 删除行尾I白
:%s= \+$== : 同上
:%s#\s*\r\?$## : 删除NI白和dos换行W?br /> :%s#\s*\r*$## : 同上
" 删除I
:%s/^\n\{3}// : 删除q箋(hu)3个空?br /> :%s/^\n\+/\r/ : 压羃IQ多个替换ؓ(f)一?br /> %s#<[^>]\+>##g : 删除html的tag部分
" IF YOU ONLY WANT TO KNOW ONE THING
:'a,'bg/fred/s/dick/joe/igc : 非常有用
# 译释Q?'a,''b指定一个范_(d)(x)mark a ~ mark b
# g//用一个正则表辑ּ指出?jin)进行操作的行必d以被fred匚w
# 看后面,g//是一个全局昄命o(h)
# s/dick/joe/igc则对于这些满x(chng)件的行进行替?br /> " 复制?br /> :%s= [^ ]\+$=&&= : 复制最后一?br /> :%s= \f\+$=&&= : 一?br /> :%s= \S\+$=&& : 晕,q(sh)P
" 记忆Q反向引用)(j)
: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或者buckQ这里|不是道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:
" qo(h)form中的内容攑֜寄存器里
: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或者f(xi)unctions的行中的数字?
:g/loc\|function/s/\d/\=submatch(0)+6/
" 比上面更好的Ҏ(gu)
:%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转换?0Q?1Q?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(h)
: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 aQa为标记的位置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(h)的结?(注意必须使用d模式) 你需要?qaq 清空寄存器a.
"save results to a register/paste buffer 存储l果?寄存?_脓(chung) ?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 '&'/
" 用文件中的内Ҏ(gu)换字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(h)和替换命令联?(强大的编辑能?
:'a,'bg/fred/s/joe/susan/gic : 可以使用反向引用来匹?br /> :g/fred/,/joe/s/fred/joe/gic : non-line based (ultra)
----------------------------------------
" 先找fredQ然后找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单个单词)(j) (<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>单词攑օ搜烦(ch)或者命令行
/<C-R><C-A> : 把字W串中有的单?lt;CWORD>攑օ搜烦(ch)或者命令行
:set ignorecase : 忽略大小?br /> :syntax on : 打开语法高(sh) Perl,HTML,PHP {等
:h regexp<C-D> : 按ctrl+d得到包含regexp的列?br /> (按tab自动不齐)
----------------------------------------
" 单编辑更?_vimrc文g
:nmap ,s :source $VIM/_vimrc :普通模式下的键盘映?,s映射成加载用L(fng)录下?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小写)(j)
VU : 转换选中的行Q大写)(j)
g~~ : 反向转换
vEU : 转换词大?br /> vE~ : 反向转换?br /> ggguG : 当前编辑文件内容全部{换成写
" Visually 模式下选择所有的字母?qing)数?(攑օ .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!
----------------------------------------
" 标记 & Ud
'. : 跛_最后编辑的?(有?
`. : 同上Q但是定位编辑点
g; : 跌{到比较旧的编辑位|(如果有的话)(j) (vim6.3后的新功?
g, : q个是较?j)的位?(同上)
:changes :打出改变?br /> :h changelist : 查看“改变表蟩?#8221;的帮?br /> <C-O> : 依次沿着你的跌{记录向回?(从最q的一ơ开?
<C-I> : 依次沿着你的跌{记录向前?br /> :ju(mps) : 列出跌{轨迹
:help jump-motions
:history : 列出历史记录
:his c : 命o(h)行历?br /> :his s : 搜烦(ch)历史
q/ : 搜烦(ch)命o(h)历史的窗?br /> q: : 命o(h)行命令历史的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(chng)?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 : 把当前行作ؓ(f)命o(h)执行
yy@" : 上面的匿名寄存器
u@. : 只执行键入的命o(h)
----------------------------------------
" 从其它命令处获得输入Q需要外部命令)(j)
:r!ls.exe : 从ls 获得输入插入到当前位|?br /> !!date : 从date获得输入Q删除当前行Q?br /> " 使用外部sort排序
:%!sort -u : 用sort排序整个文gQ结果覆盖整个文Ӟ(j)
:'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 : 保存当前bufferq蟩转到下一个buffer (有?
:wp : 保存当前bufferq蟩转到前一个buffer
:bd : 把当前文件从bufferUd (有?
:bun : 卸蝲当前buffer (关闭q个H口但是不移?
:badd file.c : dfile.c到buffer列表
:b 3 : 前往W三?buffer
:b main : 前往含有main的buffer?比如?main.c
:sav php.html : 把当前文件存?sh)php.htmlq打开
: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(h) (最好的技?
qq # 录制命o(h)攑օ 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) 键入 : 显CZ面信?br /> :'<,'>
4)完成如下操作
:'<,'>norm @q
----------------------------------------
"combining a recording with a map (to end up in command mode)
nnoremap ] @q:w!<bar>bd
----------------------------------------
" 可视化模式提供一U灵zL用的Ҏ(gu)选择一块文本供操作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(h))
<C-V>Q然后通过Ud命o(h)选择?(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 : 输入搜烦(ch)命o(h)Ӟ立即昄目前输入的模式对应的匚w。匹配的字符?br /> 被高?sh)?br /> :set wildignore=*.o,*.obj,*.bak,*.exe : tab补全时忽略这些忽略这?br /> :set shiftwidth=3 : 讄自动~进?个字W?br /> :set vb t_vb=". : 安静(rn)模式Q关闭响铃跟闪烁
:set browsedir=buffer : 讄文g览使用的目?br /> “注:(x)
”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
"< 意ؓ(f)向内~进Qgv 上面已有解释Qؓ(f)重复上次选区
“<gv 也就是先向内~进然后再选择刚才的选区
“q样可以只?< 实现重复~进?br /> :vnoremap > >gv Q向内羃q,原理同上
" 块羃q?br /> >i{
>a{
" also
>% and <%
”自己试试看吧Q涉?qing)到?{ 的语a很有用,比如c,c++{?br /> ----------------------------------------
" 重定?& _脓(chung)到寄存器 * Q?为寄存器名称Q?br /> :redir @* : 重定向命令到paste~冲?br /> :redir END : l束
:redir >> out.txt : 重定向到文g
" 操作_脓(chung)~冲?br /> "*yy : 复制到寄存器
"*p : 从寄存器中粘贴一?br /> " 复制到粘贴缓冲区 (扩展模式)
:'a,'by* : 复制一个范围到_脓(chung)寄存?br /> :%y* : 复制一个括号匹配到_脓(chung)~冲?br /> :.y* : 复制当前行到_脓(chung)~冲?br /> " 从剪贴板上过滤非可打印字W?br /> " 当从一?GUI E序_脓(chung)时会(x)有用?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(h)使用于多个文?br /> :argdo %s/foo/bar/e : 在所有文件上操做 :args
:bufdo %s/foo/bar/e
:windo %s/foo/bar/e
:argdo exe '%!sort'|w! : 包含外部命o(h)
----------------------------------------
" 命o(h)行技?br /> gvim -h : 昄帮助
ls | gvim - : 道操作
cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " : 从管道出qo(h)内容
gvim -o file1 file2 : 分割H口昄两个文g
" 打开文g后执行一条命?br /> gvim.exe -c "/main" joe.c : 打开 joe.c & 跌{?"main"
" 在打开一个文件时执行多条命o(h)
vim -c "%s/ABC/DEF/ge | update" file1.c
" 在一l文件上执行多条命o(h)
vim -c "argdo %s/ABC/DEF/ge | update" *.c
" 从一pd文g中删除一块区?br /> vim -c "argdo /begin/+1,/end/-1g/^/d | update" *.c
" 自动~辑文g (~辑命o(h)序列Ex commands已经包含在convert.vim中了(jin))
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(h)行或者搜索行
<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(h)?paste buffer
:let @*=@/ : 拯最后执行的查找命o(h)到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 : qo(h)帮助文g 使用 :cn, :cp 查找下一个及(qing)后一?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(h)行帮?br /> ----------------------------------------
" 选项讄在那?br /> :scriptnames : 列出所有已l加载的 plugins, _vimrcs文g
:verbose set history? :昄 history的值ƈ昄在那里定义的
:function : 列出所有函?br /> :func SearchCompl : 昄指定函数的细?br /> ----------------------------------------
" 制作你自qVIM 帮助
: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 # : 新徏一个bufferQ从另一个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回RW和I格
autocmd BufRead * silent! %s/[\r \t]\+$//
autocmd BufEnter *.php :%s/[ \t\r]\+$//e
----------------------------------------
" Ҏ(gu)定文件或文gcd执行某个动作
autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?
autocmd FileType *.pl exec('set fileformats=unix')
----------------------------------------
" 把最后一个命令脓(chung)到当前位|?br /> i<c-r>:
" 把最后一个搜索指令脓(chung)到当前位|?br /> i<c-r>/
----------------------------------------
" 更多的完成功?br /> <C-X><C-F> :插入当前目录下的一个文件名到当前位|?br /> # 在insert模式下?br /> # 然后?Ctrl-P/Ctrl-N 页
----------------------------------------
" 替换一个visual区域
" 选择一个区域,然后输入 :s/Emacs/Vim/ {等Qvim?x)自动进?模式
:'<,'>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参见:(x)
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
----------------------------------------
" 在当前插入模式下~辑/Ud (真得很有?
<C-U> : 删除全部
<C-W> : 删除最后一个单?br /> <HOME><END> : Ud到行?行尾
<C-LEFTARROW><C-RIGHTARROW> : 向前/后移动一个单?br /> <C-X><C-E>,<C-X><C-Y> : scroll while staying put in insert
----------------------------------------
#加密(心(j)使用Q不要忘?sh)(jin)密?
:X : vim?x)提CZ输入密码
:h :X
----------------------------------------
" 模式?(使文件只ȝ)Q必d??5行内
// vim:noai:ts=2:sw=4:readonly:
" vim:ft=html: : 使用 HTML 语法高(sh)
: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(h)
: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 语法高(sh)
# 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隐藏某些片断,使查看更Ҏ(gu)
zf} : 使用动作命o(h)折叠一个段?br /> v}zf : 使用可视模式折叠一个段?br /> zf'a : 折叠C个标C
zo : 打开折叠
zc : 重新关闭折叠
----------------------------------------
" 昄"不可见字W?
:set list
:h listchars
----------------------------------------
" 如何在不q入插入模式的情况下_脓(chung)"普通模式的命o(h)"
:norm qqy$jq
----------------------------------------
" 处理文g?br /> :h filename-modifiers : 帮助
:w % : 写入当前文g
:w %:r.cfm : 改变文g扩展名ؓ(f) .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删除一个单?(使用黑洞???)
----------------------------------------
" 送完整的路径名到剪脓(chung)板,用于邮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|高?sh)显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
" Ҏ(gu)文gcd映射快捷?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的时候执行了(jin)一个命?br /> # 先写入了(jin) Just Another Vim Hacker 的rot13~码
# 然后再解?/font>



]]>
vim 昄行号、语法高?sh)、自动羃q的讄http://www.tkk7.com/lingy/archive/2009/09/02/293574.html林光?/dc:creator>林光?/author>Wed, 02 Sep 2009 04:24:00 GMThttp://www.tkk7.com/lingy/archive/2009/09/02/293574.html在Ubuntu中vim的配|文件存攑֜/etc/vim目录中,配置文g名ؓ(f)vimrc

在Fedora中vim的配|文件存攑֜/etc目录中,配置文g名ؓ(f)vimrc

在终?输入以下命o(h)来编辑vimrc配置文gQ?br /> sudo vim /etc/vim/vimrc
或?sudo gedit /etc/vim/vimrc

1、显C?br />   
在文件末端添加一新行Q输?set nu

2、语法高?sh)?br /> 在文件中扑ֈ "syntax on   q一行,L前面的双引号"Q双引号是注释的意?/p>

3、自动羃q?/p>

在文件末添加一行,输入  set autoindent
在添加一行,输入         set cindent
其中 autoindent 是自动羃q; cindent是特别针?C语言语法自动~进

注意Q如果设|好以上讄后,VIM没有作出相应的动作,那么请你把你的VIM升到最新版Q一般只要在l端输入以下命o(h)卛_Qsudo apt-get install vim

大家用VIM愉快Q?/p>

 


下面告诉大家怎么在linux下学?fn)CQC在linux下的~译器是gccQ你在终端用vim输入C的源?/p>

          如下保存到hello.c然后在命令行q行Q?/p>

 

          Q?gcc hello.c -o hello

 

          q样?x)生成一个hello的可执行文gQ在命o(h)行里输入Q?/p>

 

          Q?./hello

 

          pq行刚刚你编译的C源码?/p>

 

            linux下同样也能编译C++Qlinux下C++~译器是gQ+Q特别提C:(x)

            C++的头文g是iostream不是iostream.h另外q需加入命名I间stdQ例如:(x)

            //hello.cpp

            #include <iostream>

            using namespace std;

            int main ()

            {

                  cout<<"helloworld!"<<endl;

             }

 

            q样才能正常~译Q在该目录下Q终端输入:(x)

 

            # g++ hello.cpp -o hello

          

            q样q成一个hello的可执行文gQ同?/hello命o(h)q行?/p>

 

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



]]>
一个简单的逻辑备䆾{略学习(fn) http://www.tkk7.com/lingy/archive/2009/07/10/286287.html林光?/dc:creator>林光?/author>Fri, 10 Jul 2009 08:58:00 GMThttp://www.tkk7.com/lingy/archive/2009/07/10/286287.html一个简单的逻辑备䆾{略学习(fn)
需求:(x)
每天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
#CREATORQdaimin
#functionQbackup database with expdp
#usageQcrontab on linux
#last modifyQtuolei 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
否则?x)出?bin/sh: /opt/backup_exp.sh: Permission denied错误
2、需要在脚本的第一行加#!/bin/sh
否则?x)出?bin/sh: /opt/backup_exp.sh: cannot execute binary file错误
3、注意在执行exp命o(h)之前Q需要设|环境变量,所以在逻辑备䆾脚本中执行了(jin). /home/autoBackup/ora_env 命o(h);


参考网:(x)
http://blog.csdn.net/wzy0623/archive/2008/10/31/3193150.aspx
http://www.linuxsir.org/main/?q=node/209


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



]]>
Linuxpȝ利用Crontab命o(h)实现定时重启http://www.tkk7.com/lingy/archive/2009/07/10/286193.html林光?/dc:creator>林光?/author>Fri, 10 Jul 2009 03:01:00 GMThttp://www.tkk7.com/lingy/archive/2009/07/10/286193.html  Crontab是一个很方便的在unix/linuxpȝ上定?循环)执行某个d的程?

  使用cron服务Q用 service crond status 查看 cron服务状态,如果没有启动?service crond start启动它,

  cron服务是一个定时执行的服务Q可以通过crontab 命o(h)d或者编辑需要定时执行的dQ?

  crontab -u //讑֮某个用户的cron服务Q一般root用户在执行这个命令的时候需要此参数

  crontab -l //列出某个用户cron服务的详l内?

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

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

  比如说root查看自己的cron讄Qcrontab -u root -l

  再例如,root惛_除fred的cron讄Qcrontab -u fred -r

  在编辑cron服务Ӟ~辑的内Ҏ(gu)一些格式和U定Q输入:(x)crontab -u root -e

  q入vi~辑模式Q编辑的内容一定要W合下面的格式:(x)*/1 * * * * ls >> /tmp/ls.txt

  ~辑/etc/crontab文gQ在末尾加上一行:(x) 30 5 * * * root init 6 q样将pȝ配置Z(jin)每天早上5?0自动重新启动?

  需要将crond讄为系l启动后自动启动的服务,可以?etc/rc.d/rc.local 中,在末֊?

  service crond start

  如果q需要在pȝ启动十加载其他服务,可以l箋(hu)加上其他服务的启动命令?

  比如Q?service mysqld start

  基本用法:

  1. crontab -l

  列出当前的crontabd

  2. crontab -d

  删除当前的crontabd

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

  ~辑一个crontabd,ctrl_Dl束

  4. crontab filename

  以filename做ؓ(f)crontab的Q务列表文件ƈ载入

  crontab file的格?

  crontab 文g中的行由 6 个字D늻成,不同字段间用I格?tab 键分隔。前 5 个字D|定命令要q行的时?

  分钟 (0-59)

  时 (0-23)

  日期 (1-31)

  月䆾 (1-12)

  星期?0-6Q其?0 代表星期?

  W?6 个字D|一个要在适当旉执行的字W串

  例子:

  #MIN HOUR DAY MONTH DAYOFWEEK COMMAND

  #每天早上6?0?

  10 6 * * * date

  #每两个小?

  0 */2 * * * date (solaris 5.8g不支持此U写?

  #晚上11点到早上8点之间每两个时Q早??

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

  #每个月的4号和每个C拜的礼拜一到礼拜三的早?1?

  0 11 4 * mon-wed date

  #1月䆾日早??

  0 4 1 jan * date

  补充Q在使用crontab的时候,要特别注意的是运行脚本中能够讉K到的环境变量和当前测试环境中的环境变量未必一_(d)一个比较保险的做法是在q行的脚本程序中自行讄环境变量(export)

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

  36 5 * * * reboot

  (2)上传?opt目录

  (3)q行命o(h)

  crontab /opt/crond.txt

  crontab -l

  让配|文件生效:(x)如果让配|文件生效,q得重新启动cronQ切讎ͼ既然每个用户下的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(h)d或者编辑需要定时执行的d

Crontab文g的每一行由六个?minutes、hours、day of month、month、day of week?command)l?成,域之间用I格或Tab分开Q其中:(x)

minutesQ?分钟域,值的范围??9

hoursQ?时域,值的范围??3

day of monthQ?日期Q值的范围??1

monthQ?月䆾Q值的范围??2

day of weekQ?星期Q值的范围??Q星期日gؓ(f)0

commandQ?所要运行的命o(h)

如果一个域?Q表明命令可以在该域所有可能的取D围内执行?

如果一个域是由q字W隔开的两个数字,表明命o(h)可以在两个数字之间的范围内执行(包括两个数字 本nQ?

如果一个域是由逗号隔开的一pd值组成的Q表明命令可以在q些值组成的范围内执行?

如果日期域和星期域都有|则这两个域都有效?

~写一个文Ӟ用以启动自动备䆾q程?

cd /opt

touch reboot.txt

在reboot.txt中添加一下内?

0 4 * * * reboot

crontab /opt/reboot.txt

用crontab -e~辑定时操作Q例如加入下行命令:(x)

用crontab Ql命o(h)来查?

注意:需要启动服?d在rc.local?

重启crondd

/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(h)?

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的格式:(x)M H D m d cmd.

M: 分钟Q?-59Q?

HQ小Ӟ0-23Q?

DQ天Q?-31Q?

m: 月(1-12Q?

d: 一星期内的天(0~6Q?为星期天Q?

cmd要运行的E序Q程序被送入sh执行Q这个shell只有USER,HOME,SHELLq三个环境变量?

下面是一个例子文Ӟ(x)

#MIN HOUR DAY MONTH DAYOFWEEK COMMAND
            #每天早上6?
            106* * * date
            #每两个小?
            0*/2* * * date
            #晚上11点到早上8点之间每两个时Q早上部?
            0 23-7/2Q?* * * 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责ȝ辑:(x)云子Q?



]]>
Linux定时dpȝCron入门http://www.tkk7.com/lingy/archive/2009/07/09/286135.html林光?/dc:creator>林光?/author>Thu, 09 Jul 2009 10:38:00 GMThttp://www.tkk7.com/lingy/archive/2009/07/09/286135.htmlcron是一个linux下的定时执行工具Q可以在无需人工q预的情况下q行作业。由于Cron 是Linux的内|服务,但它不自动v来,可以用以下的Ҏ(gu)启动、关闭这个服务:(x)

 

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

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

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

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

 

 

你也可以这个服务在pȝ启动的时候自动启动:(x)

 

?etc/rc.d/rc.localq个脚本的末֊上:(x)

/sbin/service crond start

 

现在Cronq个服务已经在进E里面了(jin)Q我们就可以用这个服务了(jin)QCron服务提供以下几种接口供大家用:(x)

 

1.直接用crontab命o(h)~辑

 

cron服务提供crontab命o(h)来设定cron服务的,以下是这个命令的一些参C说明Q?/p>

 

crontab -u //讑֮某个用户的cron服务Q一般root用户在执行这个命令的时候需要此参数

 

crontab -l //列出某个用户cron服务的详l内?/p>

 

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

 

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

 

比如说root查看自己的cron讄Qcrontab -u root -l

 

再例如,root惛_除fred的cron讄Qcrontab -u fred -r

 

在编辑cron服务Ӟ~辑的内Ҏ(gu)一些格式和U定Q输入:(x)crontab -u root -e

 

q入vi~辑模式Q编辑的内容一定要W合下面的格式:(x)*/1 * * * * ls >> /tmp/ls.txt

 

q个格式的前一部分是对旉的设定,后面一部分是要执行的命令,如果要执行的命o(h)太多Q可以把q些命o(h)写到一个脚本里面,然后在这里直接调用这个脚本就可以?jin),调用的时候记得写出命令的完整路径。时间的讑֮我们有一定的U定Q前面五?号代表五个数字,数字的取D围和含义如下Q?/p>

 

分钟 Q?-59Q?/p>

 

時 Q?-23Q?/p>

 

日期 Q?-31Q?/p>

 

月䆾 Q?-12Q?/p>

 

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

 

除了(jin)数字q有几个个特D的W号是"*"?/"?-"?,"Q?代表所有的取D围内的数字,"/"代表每的意?"*/5"表示?个单位,"-"代表从某个数字到某个数字,","分开几个L的数字。以下D几个例子说明问题Q?/p>

 

每天早上6?/p>

 

0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echoQ从屏幕上看不到M输出Q因为cron把Q何输出都email到root的信׃(jin)?/p>

 

每两个小?/p>

 

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

 

晚上11点到早上8点之间每两个时Q早上八?/p>

 

0 23-7/2Q? * * * echo "Have a good dreamQ)(j)" >> /tmp/test.txt

 

每个月的4号和每个C拜的礼拜一到礼拜三的早?1?/p>

 

0 11 4 * 1-3 command line

 

1?日早??/p>

 

0 4 1 1 * command line

 

每次~辑完某个用L(fng)cron讄后,cron自动?var/spool/cron下生成一个与此用户同名的文gQ此用户的cron信息都记录在q个文g中,q个文g是不可以直接~辑的,只可以用crontab -e 来编辑。cron启动后每q一份钟Mơ这个文Ӟ(g)查是否要执行里面的命令。因此此文g修改后不需要重新启动cron服务?/p>

 

2.~辑/etc/crontab 文g配置cron

 

cron服务每分钟不仅要M?var/spool/cron内的所有文Ӟq需要读一?etc/crontab,因此我们配置q个文g也能q用 cron服务做一些事情。用crontab配置是针Ҏ(gu)个用L(fng)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个参数?jin),如果Lq个参数的话Q后面就可以写要q行的某个脚本名Q而不是文件夹名了(jin)



]]>
Ubuntu Linuxpȝ下Apt-get命o(h)参数详解http://www.tkk7.com/lingy/archive/2009/06/13/282008.html林光?/dc:creator>林光?/author>Sat, 13 Jun 2009 04:28:00 GMThttp://www.tkk7.com/lingy/archive/2009/06/13/282008.html    apt-cache search package 搜烦(ch)?/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 ?jin)解使用依?/p>

    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 (g)查是否有损坏的依?/p>

]]>
Ubuntu 8׃n文ghttp://www.tkk7.com/lingy/archive/2009/06/13/281957.html林光?/dc:creator>林光?/author>Sat, 13 Jun 2009 00:58:00 GMThttp://www.tkk7.com/lingy/archive/2009/06/13/281957.html环境Q主机操作系l是Windows XPQ虚拟机是Ubuntu 8.10Q虚拟机是VirtualBox 2.1.0?/p>

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

    安装好Ubuntu 8.10后,q行Ubuntuq登录。然后在VirtualBox的菜单里选择"讑֤(Devices)" -> "安装增强功能?Install Guest Additions)"?/p>

    你会(x)发现在Ubuntu桌面上多Z个光盘图标,q张光盘默认被自动加载到?jin)文件?media/cdom0。进入命令行l端Q输入:(x)

    cd /media/cdom0

    sudo ./VboxLinuxAdditions.run

    开始安装工具包。安装完毕后?x)提C重启Ubuntu?/p>

    2. 讄׃n文g?/p>

    重启完成后点?讑֤(Devices)" -> ׃n文g?Shared Folders)菜单Q添加一个共享文件夹Q选项固定和(f)时是指该文gҎ(gu)否是持久的。共享名可以d一个自己喜Ƣ的Q比?gongxiang"Q尽量用英文名U?/p>

    3. 挂蝲׃n文g?/p>

    重新q入虚拟UbuntuQ在命o(h)行终端下输入Q?/p>

    sudo mkdir /mnt/shared

    sudo mount -t vboxsf gongxiang /mnt/shared

    其中"gongxiang"是之前创建的׃n文g夹的名字。OKQ现在Ubuntu和主机可以互传文件了(jin)?/p>

    假如(zhn)不x(chng)一ơ都手动挂蝲Q可以在/etc/fstab中添加一?/p>

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

    q样p够自动挂载了(jin)?/p>

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

    sudo umount -f /mnt/shared

    注意Q?/p>

    ׃n文g夹的名称千万不要和挂载点的名U相同。比如,上面的挂载点?mnt/sharedQ如果共享文件夹的名字也是shared的话Q在挂蝲的时候就?x)出现如下的错误信?看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|络配置QNAT和Host InterfaceQ?/title><link>http://www.tkk7.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.tkk7.com/lingy/archive/2009/06/13/281951.html</guid><description><![CDATA[<p>VirtualBox提供?jin)三U联|方式,在这里介l前两种方式QNAT和HostInterfaceQ的配置Ҏ(gu)Q第三种联网方式属于利用L上的所有的虚拟机构Z个虚拟网l的Ҏ(gu)Q较单,有兴的可以查看自带的用h册?/p> <p>W一U方式NATQNATQ网l地址转换Q,你可以认Z的虚拟机是在你的L后方Q所有的联网h都先通过LQ其实是通过L的NAT服务器,q是VirtualBox内置的)(j)?/p> <ul> <li>优点Q配|简单,可以说只要你的主机可以上|那么配|就没有什么难的? <li>~点Q虚拟OS的网l地址外网不可见,无法与你的主行通信Q所以如果你要利用主机和你的虚拟OS调试|络应用E序Q恐怕不能用这U联|方式?</li> </ul> <p>配置步骤Q?/p> <p>W一步:(x)打开VirtualBox的设|窗?/p> <p><a target="_blank"><img src="http://static11.photo.sina.com.cn/bmiddle/4b73e76006f99d03acbfa" alt="" /></a></p> <p>W二步:(x)q入|络讄界面QƈAttached To 选项选ؓ(f)NATQ点ȝ?/p> <a target="_blank"></a> <p><a target="_blank"><img src="http://static11.photo.sina.com.cn/bmiddle/4b73e76006f99d19b0f5a" alt="" /></a></p> <p>W三步:(x)启动虚拟操作pȝQƈ在该pȝ中设|联|方式ؓ(f)DHCPQ?**重要Q,自动获得|络地址QVirtualBox?x)?0.0.0.0q样的地址q行联网。这样你的虚拟OS上网Q收发邮仉没有问题。但是无法和L|络中的其他PC通信哦?/p> <p> <wbr></p> <p>下面介绍Host Interface的方式进行连?/p> <p>先关闭你的虚拟操作系l^_^</p> <p>W一步:(x)打开讄界面Q到|络选项卡下Qƈ选择Host Interfaceq接方式Q其他设|不需要改?/p> <p><a target="_blank"><img src="http://static16.photo.sina.com.cn/bmiddle/4b73e76045c024478a4bf" alt="" /></a></p> <p> <wbr></p> <p>W二步:(x)在网l选项卡下方的Host Interfaces中,新徏一个网l接口,点击x(chng)的绿色button。这样会(x)在你的主机的|络q接中增加一个VirtualBox Host Interface 1q样的一个本地连接?/p> <p><a target="_blank"><img src="http://static8.photo.sina.com.cn/bmiddle/4b73e76045c024e154eb7" alt="" /></a></p> <p>在主机的|络q接中,新徏的连接是默认断开的(当然咯,因ؓ(f)你的虚拟Lq没有启动嘛Q?/p> <p><a target="_blank"><img src="http://static7.photo.sina.com.cn/bmiddle/4b73e76045c02511b8cb6" alt="" /></a></p> <p>W三步:(x)很重要的一步,我就是卡在这里好久时间才搞明白。VirtualBox需要设|一个网桥,而得所虚拟出来的网l接口可以通过你本机的|卡q行联网。怎么讄呢?</p> <p>选中上图中的两个本地q接Q右键,选择桥接可以咯?/p> <p>W四步:(x)q入虚拟操作pȝQ修改联|方式ؓ(f)?rn)态IP的方式,q样O(jin)K?/p> <img src ="http://www.tkk7.com/lingy/aggbug/281951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/lingy/" target="_blank">林光?/a> 2009-06-13 07:50 <a href="http://www.tkk7.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.tkk7.com/lingy/archive/2009/06/04/279944.html林光?/dc:creator>林光?/author>Thu, 04 Jun 2009 01:21:00 GMThttp://www.tkk7.com/lingy/archive/2009/06/04/279944.html
有时候需要在一?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C4%BF%C2%BC">目录下的所有文件查扑֐有特定字W串的文Ӟ?qing)特定字W串在文件中的定位?br /> 自然反应肯定是用grep命o(h)Q加?r参数?br /> grep -r "pattern" .
可是如果待查扄目录是SVN目录Q然后,ȝ录下面又有N多子目录Q再用grep可就惨了(jin)Q会(x)查出好多.svn目录下含有该字符串的文gQ而这些文件是 创徏SVN目录时由 tortoiseSVN自动创徏的辅助目录。这些文件我们是不修改的。但是大量这L(fng)文g?x)严重?jing)响我们的修改速度?br /> grep?-exclude参数Q?br /> grep -r --exclude=.svn "pattern" .
但是q只能排除掉ȝ录下边的.svn目录Q对于子目录里的.svn无能ؓ(f)力了(jin)?br />
q时候就该find命o(h)上场?jin)。先说一下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 ?&& ?|| cM?br /> 如果 -path "*\.svn" 为真Q则求?-prune , -prune q回真,与逻辑表达式ؓ(f)真;否则不求?-pruneQ与逻辑表达式ؓ(f)假?br /> 如果 -path "*\.svn" -a -prune 为假Q则求?-print Q?printq回真,或逻辑表达式ؓ(f)真;否则不求?-printQ或逻辑表达式ؓ(f)真?br /> q个表达式组合特例可以用伪码写ؓ(f)
if -path "*\.svn" then
-prune
else
-print
如果需要避开多个文g?可以使用下面的命?
find . \( -path dir1 -o -path file1 \) -prune -o -print
圆括可C辑ּ的结合?br /> \ 表示引用Q即指示 shell 不对后面的字W作Ҏ(gu)解释Q而留l?find 命o(h)去解释其意义?br /> 查找某一定文gQ?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">搜烦(ch)特定串了(jin).l合xargs使用卛_.
find . -path "*\.svn" -prune -o -print|xargs grep "CodeType" -n


]]>
Linux字符集的修改Ҏ(gu) http://www.tkk7.com/lingy/archive/2009/06/02/279603.html林光?/dc:creator>林光?/author>Tue, 02 Jun 2009 07:00:00 GMThttp://www.tkk7.com/lingy/archive/2009/06/02/279603.html

用export LANG=zh_CN.UTF-8q样只下ơ重起又要重讄

修改 /etc/sysconfig/i18n 文gQ如

LANG="en_US"Qxwindow?x)显C文界面,

LANG="zh_CN.GB18030"Qxwindow?x)显CZ文界面?/p>

~辑/etc/sysconfig/i18nq个文gQ?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选定的语aQ例如英?中文、英?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.tkk7.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.tkk7.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 /> 变换后如果有相同的文件名?x)被覆盖掉的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.tkk7.com/lingy/aggbug/279434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/lingy/" target="_blank">林光?/a> 2009-06-01 17:26 <a href="http://www.tkk7.com/lingy/archive/2009/06/01/279434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux中locate 命o(h)的?/title><link>http://www.tkk7.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.tkk7.com/lingy/archive/2009/05/28/278323.html</guid><description><![CDATA[<div class="erlnwrq" id="content"> <p>名称Qlocate</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()">Ҏ(gu)</nobr>是先建立一个包括系l内所有档案名U及(qing)路径的数据库Q之后当L时就只需查询q个数据库,而不必实际深入档案系l之中了(jin)?/clk></p> <p>  在一般的 distribution 之中Q数据库的徏立都被放?contab 中自动执行。一般用者在使用时只要用</p> <p> # locate your_file_name的型式就可以?jin)?参数Q?/p> <p>-u</p> <p>-U</p> <p>建立数据库,-u ?x)由根目录开始,-U 则可以指定开始的位置?/p> <p>  -e</p> <p>  ?/p> <p>  排除在寻扄范围之外?/p> <p>  -l</p> <p><clk style="font-size: 14px; line-height: 15pt">  如果 ?1Q则启动安全模式。在安全模式下,使用者不?x)看?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>无法看到的档案。这?x)始速度减慢Q因?locate 必须臛_际的档案pȝ中取得档案的权限资料?/clk></p> <p>  -f</p> <p>  特定的档案pȝ排除在外Q例如我们没有到理要?proc 档案pȝ中的档案攑֜数据库中?/p> <p>  -q</p> <p>  安静(rn)模式Q不?x)显CZQ何错误讯息?/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(h)可以在搜L据库时快速找到档案,数据库由updatedbE序来更斎ͼupdatedb是由cron daemon周期性徏立的Qlocate命o(h)在搜L据库时比由整个由盘资料来搜寻资料来得快Q但较差劲的是locate所扑ֈ的档案若是最q才建立或刚更名的,可能?x)找不到Q在内定gQupdatedb每天?x)跑一ơ,可以׃改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的档案,它会(x)d存档案与目录名称的数据库内,L合乎范本样式条g的档案或目录录,可以使用Ҏ(gu)字元Q如”*”?#8221;?”{)(j)来指定范本样式,如指定范本ؓ(f)kcpa*ner, locate?x)找出所有v始字串ؓ(f)kcpa且结ؓ(f)ner的档案或目录Q如名称为kcpartner若目录录名称为kcpa_ner则会(x)列出该目录下包括子目录在内的所有档案?/p> <p>  locate指o(h)和find扑֯档案的功能类|但locate是透过updateE序硬盘(sh)的所有档案和目录资料先徏立一个烦(ch)引数据库Q在执行loacte时直接找该烦(ch)引,查询速度?x)较快,索引数据库一般是由操作系l管理,但也可以直接下达updatepȝ立即修改索引数据库?/p> <p>  不过W一ơ在执行update後再使用locateL档案怼(x)p|Q此时就要执行slocate ˉu该命令(也可执行updatedb指o(h)Q其效果相同Q来更新slocate数据库,该命令会(x)?usr/sbin下生slocate执行档,再由locate到此数据库寻找所要找的资料?/p> <p>locateQ该命o(h)在运行时需要后台烦(ch)引的数据库作为支撑,?<a title="Ubuntu" >Ubuntu</a> 中这个数据库文g位于 /var/cache/locate/locatedb。一般来_(d)q个数据库文件每天是通过 cron 自动更新的。如果不q没有得到更斎ͼ那么可以执行 sudo updatedb 来手动更新?/p> <p>假如我想要在pȝ中查找一个名?linux.html 的文Ӟ那么可以q样执行命o(h)Qlocate linux.html。locate 搜烦(ch)文g的速度很快Q一?x)儿׃?x)把结果列出来。locate 有一个十分有用的选项 -rQ它可以让你在搜索文件时使用正则表达式?/p> <img src ="http://www.tkk7.com/lingy/aggbug/278323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/lingy/" target="_blank">林光?/a> 2009-05-28 14:22 <a href="http://www.tkk7.com/lingy/archive/2009/05/28/278323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VirtualBox 在XP下虚拟Ubuntu时不能全屏的问题解决Ҏ(gu)http://www.tkk7.com/lingy/archive/2009/05/28/278310.html林光?/dc:creator>林光?/author>Thu, 28 May 2009 02:56:00 GMThttp://www.tkk7.com/lingy/archive/2009/05/28/278310.htmlVirtualBox 在XP下虚拟Ubuntu时不能全屏的问题解决Ҏ(gu)http://www.diybl.com/ 2008-6-14  |络 点击:  [ 评论 ]
文章搜烦(ch)Q?nbsp;    【点?yn)L包该文章?被过滤广?
【本站开通在UQQ讨论?

VirtualBox 在XP下虚拟Ubuntu时不能完全全屏的问题解决Ҏ(gu)

本hLCD 1280×800 Virtualbox 在深度XP?虚拟 Ubuntu 8.04
声音、网l一切正常,是有不能完全全屏的问题Qubuntu作ؓ(f)客机的分辨率
只能调到800×600,l过一番检?摸烦(ch)Q搞定,现整理如下:(x)

1.安装VboxLinuxadditions
aQ安装make gcc lib{?/p>

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


bQ安装module-assistant

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


cQ运?/p>

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

dQ安装VboxLinuxadditions(?#8220;讑֤”-“安装虚拟?sh)脑工具?#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需要改可以了(jin)
EndSubSection
EndSection

-------------------------------
3.重启UbuntuQ然后分辨率可以设|成1280×800?/p>

?右ctrl+F" q入全屏Q无~模?׃n剪脓(chung)板,linux和win的和q_存,
VBox的网l设|成NATQguest׃nhost的网l,q样应该可以在恶心(j)的校园网玩上linux?jin)~


文章出处Qhttp://www.diybl.com/course/6_system/linux/Linuxjs/2008614/125481.html



]]>
linux sed 扚w替换字符?/title><link>http://www.tkk7.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.tkk7.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都修Ҏ(gu)lisiQ这样做Q?br /> <br /> <span id="grpvxdy" class="t_tag" onclick="tagshow(event)" href="tag.php?name=sed">sed</span> -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`<br /> <br /> 解释一下:(x)<br /> <br /> <font color="#ff0000">-i 表示inplace editQ就CҎ(gu)?br /> -r 表示搜烦(ch)子目?br /> -l 表示输出匚w的文件名</font><br /> <br /> q个<span id="gfwctsj" class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C3%FC%C1%EE">命o(h)</span>l合很强大,要注意备份文件?br /> <font face="Verdana "><font size="2"><br /> </font></font><br /> <font face="Verdana "><font size="2">Q?Qsed '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">其中Qtest_sed的内Ҏ(gu)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第一行的0Q?没有分别替换为A,b</font><br /> <img src ="http://www.tkk7.com/lingy/aggbug/278296.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/lingy/" target="_blank">林光?/a> 2009-05-28 00:40 <a href="http://www.tkk7.com/lingy/archive/2009/05/28/278296.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>d理http://www.tkk7.com/lingy/archive/2009/05/28/278293.html林光?/dc:creator>林光?/author>Wed, 27 May 2009 16:24:00 GMThttp://www.tkk7.com/lingy/archive/2009/05/28/278293.html bg
fg
&
nohup

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

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

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


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

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



#awk (tng) (tng)-F: (tng) (tng)-f (tng) (tng)awk.prog (tng) (tng) (tng)file

模式 (tng) (tng) (tng) (tng) (tng)是一个正规表辑ּ或由!、||?amp;&、或由圆括号分组的几个正规表辑ּ?正规式必ȝ/ ... /括v
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)/hello/ (tng) (tng){print $2, $1} (tng) (tng) (tng)或?tng)?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)/hello/ || /none/ (tng) (tng){print $1, $2} (tng) (tng)或?tng)?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)!/hello/ {print $1, $2} (tng) (tng)?
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)/^[Hh1]/ {print $1, $2}
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)/hello/ {
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) print $2
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) print $1
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}

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

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

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

END (tng) (tng) (tng) (tng) (tng) (tng){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) print "End of the process..."
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}


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


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

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

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

}

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


$ df -k | awk '{print $1}'| grep -v "Filesystem"
文gpȝ
/dev/sda2
/dev/sda1
none



$ df -k | awk '{print $1}'| grep -v "Filesystem" | sed s'/\/dev\///g'
文gpȝ
sda2
sda1
none

#awk (tng) (tng)-f (tng) (tng) (tng)prog (tng) (tng)filename_list

=========================================================
-F字段分隔W?/b>
$0 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)代表整行
$1 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)W一个字D?/b>
{print (tng) (tng)$2, $1} (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)输出时以Qؓ(f)字段分隔W?/font>

在我们用LinuxӞ一些常用的命o(h)Q比如ls、date、pwd{(不一一例D?jin)?j)不太Ҏ(gu)忘记Q但是对于一些不太常用的命o(h)而言Q不光光是参敎ͼp命o(h)都会(x)忘记Q小弟是做开发工作的Q所以比较容易忘?DQ?/p>

让我们l,开始?awkQ以?jin)解其工作原理。在命o(h)行中输入以下命o(h)Q?/p>

$ awk '{ print }' /etc/passwd
 (tng)
(zhn)将?x)见?/etc/passwd 文g的内容出现在眼前。现在,解释 awk 做了(jin)些什么。调?awk Ӟ我们指定 /etc/passwd 作ؓ(f)输入文g。执?awk Ӟ它依ơ对 /etc/passwd 中的每一行执?print 命o(h)。所有输出都发送到 stdoutQ所得到的结果与与执行catting /etc/passwd完全相同?/p>

现在Q解?{ print } 代码块。在 awk 中,花括L(fng)于将几块代码l合CPq一点类g C 语言。在代码块中只有一?print 命o(h)。在 awk 中,如果只出?print 命o(h)Q那么将打印当前行的全部内容?/p>

q里是另一?awk CZQ它的作用与上例完全相同Q?/p>

$ awk '{ print $0 }' /etc/passwd
 (tng)


?awk 中, $0 变量表示整个当前行,所?print ?print $0 的作用完全一栗?/p>

如果(zhn)愿意,可以创徏一?awk E序Q让它输Z输入数据完全无关的数据。以下是一个示例:(x)

$ awk '{ print "" }' /etc/passwd
 (tng)


只要?"" 字符串传递给 print 命o(h)Q它?yu)׃?x)打印I白行。如?a onclick="javascript:tagshow(event, '%B2%E2%CA%D4');" href="javascript:;" target="_self">该脚本,会(x)发现对于 /etc/passwd 文g中的每一行,awk 都输Z个空白行。再ơ说明, awk 对输入文件中的每一行都执行q个脚本。以下是另一个示例:(x)

$ awk '{ print "hiya" }' /etc/passwd
 (tng)


q行q个脚本在(zhn)的屏幕上写?hiya?)

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

多个字段

awk 非常善于处理分成多个逻辑字段的文本,而且让?zhn)可以毫不费力地引?awk 脚本中每个独立的字段。以下脚本将打印出?zhn)的系l上所有用户帐L(fng)列表Q?/p>

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


上例中,在调?awk Ӟ使用 -F 选项来指?":" 作ؓ(f)字段分隔W。awk 处理 print $1 命o(h)Ӟ它会(x)打印出在输入文g中每一行中出现的第一个字Dc(din)以下是另一个示例:(x)


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


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

halt7
operator11
root0
shutdown6
sync5
bin1
....etc.
 (tng)


如?zhn)所见,awk 打印?/etc/passwd 文g的第一和第三个字段Q它们正好分别是用户名和用户标识字段。现在,当脚本运行时Q它q不理想 -- 在两个输出字D之间没有空|如果?fn)惯于?bash ?python q行~程Q那么?zhn)会(x)指?print $1 $3 命o(h)在两个字D之间插入空根{然而,当两个字W串?awk E序中彼此相LQawk ?x)连接它们但不在它们之间dI格。以下命令会(x)在这两个字段中插入空|(x)


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


以这U方式调?print Ӟ它将q接 $1 ? " ?$3 Q创建可ȝ输出。当?dng)如果需要的话,我们q可以插入一些文本标{:(x)


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


q将产生以下输出Q?/p>

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

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

外部脚本

脚本作为命令行自变量传递给 awk 对于的单行E序来说是非常简单的Q而对于多行程序,它就比较复杂。?zhn)肯定惌在外部文件中撰写脚本。然后可以向 awk 传?-f 选项Q以向它提供此脚本文Ӟ(x)

$ awk -f myscript.awk myfile.in
 (tng)


脚本放入文本文件还可以让?zhn)使用附?awk 功能。例如,q个多行脚本与前面的单行脚本的作用相同,它们都打印出 /etc/passwd 中每一行的W一个字D:(x)

BEGIN {
 (tng) (tng) (tng) FS=":"
}
{ print $1 }
 (tng)


q两个方法的差别在于如何讄字段分隔W。在q个脚本中,字段分隔W在代码自n中指定(通过讄 FS 变量Q,而在前一个示例中Q通过在命令行上向 awk 传?-F":" 选项来设|?FS。通常Q最好在脚本自n中设|字D分隔符Q只是因表示(zhn)可以少输入一个命令行自变量。我们将在本文的后面详细讨论 FS 变量?/p>

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

BEGIN ?END ?/p>

通常Q对于每个输入行Qawk 都会(x)执行每个脚本代码块一ơ。然而,在许多编E情况中Q可能需要在 awk 开始处理输入文件中的文本之 ?执行初始化代码。对于这U情况,awk 允许(zhn)定义一?BEGIN 块。我们在前一个示例中使用?BEGIN 块。因?awk 在开始处理输入文件之前会(x)执行 BEGIN 块,因此它是初始?FSQ字D分隔符Q变量、打印页眉或初始化其它在E序中以后会(x)引用的全局变量的极佳位|?/p>

awk q提供了(jin)另一个特D块Q叫?END 块。awk 在处理了(jin)输入文g中的所有行之后执行q个块。通常QEND 块用于执行最l计或打印应该出现在输出流l尾的摘要信息?/p>

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

规则表达式和?/p>

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


/foo/ { print }
 (tng)


当然Q可以用更复杂的规则表辑ּ。以下脚本将只打印包含QҎ(gu)的行Q?/p>

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

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

表达式和?/p>

q有许多其它Ҏ(gu)可以选择执行代码块。我们可以将L一U布?yu)(dng)表辑ּ攑֜一个代码块之前Q以控制何时执行某特定块。仅当对前面的布?yu)(dng)表辑ּ求gؓ(f)真时Qawk 才执行代码块。以下示例脚本输出将输出其第一个字D늭?fred 的所有行中的W三个字Dc(din)如果当前行的第一个字D不{于 fred Qawk l处理文件而不对当前行执行 print 语句Q?/p>


$1 == "fred" { print $3 }
 (tng)


awk 提供?jin)完整的比较q算W集合,包括 "=="?<"?>"?<="?>=" ?"!="。另外,awk q提供了(jin) "~" ?"!~" q算W,它们分别表示“匹配”和“不匚w”。它们的用法是在q算W左Ҏ(gu)定变量,在右Ҏ(gu)定规则表辑ּ。如果某一行的W五个字D包含字W序?root Q那么以下示例将只打印这一行中的第三个字段Q?/p>


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

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

条g语句

awk q提供了(jin)非常好的cM?C 语言?if 语句。如果?zhn)愿意Q可以?if 语句重写前一个脚本:(x)


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


q两个脚本的功能完全一栗第一个示例中Q布?yu)(dng)表辑ּ攑֜代码块外面。而在W二个示例中Q将Ҏ(gu)一个输入行执行代码块,而且我们使用 if 语句来选择执行 print 命o(h)。这两个Ҏ(gu)都可以用,可以选择最适合脚本其它部分的一U方法?/p>

以下是更复杂?awk if 语句CZ。可以看刎ͼ管使用?jin)复杂、嵌套的条g语句Q?if 语句看上M与相应的 C 语言 if 语句一P(x)


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


使用 if 语句q可以将代码Q?/p>


! /matchme/ { print $1 $3 $4 }
 (tng)


转换成:(x)

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


q两个脚本都只输??包含 matchme 字符序列的那些行。此外,q可以选择最适合(zhn)的代码的方法。它们的功能完全相同?/p>

awk q允怋用布?yu)(dng)运?"||"Q逻辑与)(j)?"&&"Q逻辑或)(j)Q以便创建更复杂的布?yu)(dng)表辑ּQ?/p>

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


q个CZ只打印第一个字D늭?foo ?W二个字D늭?bar 的那些行?/p>

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

数值变量!

至今Q我们不是打印字W串、整行就是特定字Dc(din)然而,awk q允许我们执行整数和点q算。通过使用数学表达式,可以很方便地~写计算文g中空白行数量的脚本。以下就是这样一个脚本:(x)

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


?BEGIN 块中Q将整数变量 x 初始化成零。然后,awk 每次遇到I白行时Qawk 执?x=x+1 语句Q递增 x 。处理完所有行之后Q执?END 块,awk 打印出最l摘要,指出它找到的I白行数量?/p>

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

字符串化变量

awk 的优点之一是“简单和字符串化”。我认ؓ(f) awk 变量“字W串化”是因ؓ(f)所?awk 变量在内部都是按字符串Ş式存储的。同Ӟawk 变量是“简单的”,因ؓ(f)可以对它执行数学操作Q且只要变量包含有效数字字符Ԍawk ?x)自动处理字W串到数字的转换步骤。要理解我的观点Q请研究以下q个CZQ?/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 :)
 (tng)


awk 输出:(x)

2.01
 (tng)


有趣吧!虽然字W串?1.01 赋值给变量 x Q我们仍然可以对它加一。但?bash ?python 中却不能q样做。首先,bash 不支持Q点运。而且Q如?bash 有“字W串化”变量,它们q不“简单”;要执行Q何数学操作,bash 要求我们数字放C陋的 $( ) ) l构中。如果?pythonQ则必须在对 1.01 字符串执行Q何数学运之前,它转换成Q点倹{虽然这q不困难Q但它仍是附加的步骤。如果?awkQ它是全自动的,而那?x)我们的代码又好又整洁。如果想要对每个输入行的W一个字D乘方ƈ加一Q可以用以下脚本:(x)

{ print ($1^2)+1 }
 (tng)


如果做一个小实验Q就可以发现如果某个特定变量不包含有效数字,awk 在对数学表达式求值时?x)将该变量当作数字零处理?/p>

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

众多q算W?/p>

awk 的另一个优Ҏ(gu)它有完整的数学运符集合。除?jin)标准的加、减、乘、除Qawk q允怋用前面演C的指数运符 "^"、模Q余敎ͼ(j)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>

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

字段分隔W?/p>

awk 有它自己的特D变量集合。其中一些允许调?awk 的运行方式,而其它变量可以被d以收集关于输入的有用信息。我们已l接触过q些Ҏ(gu)变量中的一个,FS。前面已l提到过Q这个变量让(zhn)可以设|?awk 要查扄字段之间的字W序列。我们?/etc/passwd 作ؓ(f)输入Ӟ?FS 讄?":"。当q样做有问题Ӟ我们q可以更灉|C?FS?/p>

FS 值ƈ没有被限制ؓ(f)单一字符Q可以通过指定L长度的字W模式,它讄成规则表辑ּ。如果正在处理由一个或多个 tab 分隔的字D,(zhn)可能希望按以下方式讄 FSQ?/p>

FS="\t+"
 (tng)


以上CZ中,我们使用Ҏ(gu) "+" 规则表达式字W,它表C“一个或多个前一字符”?/p>

如果字段q格分隔(一个或多个I格?tabQ,(zhn)可能想要将 FS 讄成以下规则表辑ּQ?/p>

FS="[[:space:]+]"
 (tng)


q个赋D辑ּ也有问题Q它q必要。ؓ(f)什么?因ؓ(f)~省情况下,FS 讄成单一I格字符Qawk 这解释成表C“一个或多个I格?tab”。在q个Ҏ(gu)CZ中,~省 FS 讄恰恰是?zhn)最惌的!

复杂的规则表辑ּ也不成问题。即使?zhn)的记录由单?"foo" 分隔Q后面跟着三个数字Q以下规则表辑ּ仍允许对数据q行正确的分析:(x)

FS="foo[0-9][0-9][0-9]"
 (tng)

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

字段数量

接着我们要讨论的两个变量通常q不是需要赋值的Q而是用来d以获取关于输入的有用信息。第一个是 NF 变量Q也叫做“字D|量”变量。awk ?x)自动将该变量设|成当前记录中的字段数量。可以?NF 变量来只昄某些输入行:(x)

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


当然Q也可以在条件语句中使用 NF 变量Q如下:(x)

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

 (tng)

 (tng)


Q+Q+Q+Q+Q+Q+Q+Q?br /> (tng)

 (tng)

记录?/p>

记录?(NR) 是另一个方便的变量。它始终包含当前记录的编Pawk 第一个记录算作记录号 1Q。迄今ؓ(f)止,我们已经处理?jin)每一行包含一个记录的输入文g。对于这些情况,NR q(sh)(x)告诉(zhn)当前行受然而,当我们在本系列以后部分中开始处理多行记录时Q就不会(x)再有q种情况Q所以要注意Q可以象使用 NF 变量一样?NR 来只打印某些输入行:(x)

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


另一个示例:(x)

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



]]>
假如要将当前目录下的所有文件中的windows替换成linux,可以执行http://www.tkk7.com/lingy/archive/2009/05/27/278139.html林光?/dc:creator>林光?/author>Wed, 27 May 2009 01:19:00 GMThttp://www.tkk7.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两天在构徏一个应用的使用用到?jin)maven,׃project很大,?00多个pom.xml文g,更郁L(fng)是在很多pom.xml文g里都单独指定?jin)资源库的url,我需要把q些资源库的urll一指定到nexus本地中央?

手工一个个Ҏ(gu)仉|有点不太实?所以google?jin)一?扑ֈ扚w替换文g内容的好Ҏ(gu),命o(h)l构如下:

find -name '要查扄文g? | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'

下面q个例子是当前目录及(qing)所有子目录下的所有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里用到?jin)Perl语言,

perl -pi -e

在Perl 命o(h)中加?e 选项Q后跟一行代码,那它?yu)׃?x)像运行一个普通的Perl 脚本那样q行该代?

从命令行中用Perl 能够帮助实现一些强大的、实时的转换。认真研I正则表辑ּQƈ正确C用,会(x)为?zhn)省去大量的手工编辑工作?/p>

]]>
2007-08-02 | linux 替换文g内容 sed工具 http://www.tkk7.com/lingy/archive/2009/05/27/278138.html林光?/dc:creator>林光?/author>Wed, 27 May 2009 01:16:00 GMThttp://www.tkk7.com/lingy/archive/2009/05/27/278138.html2007-08-02 | linux 替换文g内容 sed工具


]]>Linux下Kill多个q程的妙?/title><link>http://www.tkk7.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.tkk7.com/lingy/archive/2009/05/21/274478.html</guid><description><![CDATA[<h2>[转帖]Linux下Kill多个q程的妙?/h2> <div class="fvbsbsc" id="postmessage_102542" class="t_msgfont">  工作中经帔R要Kill多个q程Q如果这些进E有共同的特点,可以用一条命令Kill掉它们。比如清除Oracle数据库的所有远E连接进E:(x)<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(h)Q管道符左边命o(h)的输Z(x)作ؓ(f)道W右边命令的输入。下面说说用道W联接v来的几个命o(h)Q?br /> <br />   ps -efww|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9<br /> <br /> <br />   道W?#8220;|”用来隔开两个命o(h)Q管道符左边命o(h)的输Z(x)作ؓ(f)道W右边命令的输入。下面说说用道W联接v来的几个命o(h)Q?br /> <br /> “ps -efww”是Red Hat 7.0里查看所有进E的命o(h)。这时检索出的进E将作ؓ(f)下一条命?#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(h)是用来把前面命o(h)的输出结果(PIDQ作?#8220;kill -9”命o(h)的参敎ͼq执行该命o(h)?#8220;kill -9”?x)强行杀掉指定进E,q样成功清除了(jin)oracle的所有远E连接进E。其它类似的dQ只需要修?#8220;grep LOCAL=NO”中的关键字部分就可以?jin)?br /> </div> <img src ="http://www.tkk7.com/lingy/aggbug/274478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/lingy/" target="_blank">林光?/a> 2009-05-21 22:22 <a href="http://www.tkk7.com/lingy/archive/2009/05/21/274478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>awk文本处理ȝ(转蝲)http://www.tkk7.com/lingy/archive/2009/05/19/271482.html林光?/dc:creator>林光?/author>Tue, 19 May 2009 02:43:00 GMThttp://www.tkk7.com/lingy/archive/2009/05/19/271482.html作ؓ(f)技术支持工E我们最最l常的工作就是经常碰到要处理文本文gQ不是什么数据库最后都可以导成文本Q我们就可以对他q行处理?jin),q样即你不是对所有数据库操作都很熟?zhn)也可以对他的数据q行处理?jin)?br />     我们必须的工h两个一个是shell一个是awkQawk对于处理文本文g是最最适合的掌握了(jin)awk我们可以很方便的处理文本文件再借助一些shell命o(h)我们可以很方便得到自己想要的l果。现在从单的例子来ȝ一下我觉得?x)经常碰到的问题?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语句是ؓ(f)?jin)和shell 命o(h)区别Q?1的意思就是文本文件的W一列,正常的awk命o(h)跟随-F参数指定间隔W号Q如果是I格或tab键就可以省略?jin)?br />    
user1
user2
user3 

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

        q行命o(h)和上一行比较增加了(jin)“if($5>20)”Q得到的l果?/p>

user3

q个if语句没有必要更详细的解释了(jin)吧!是W?列大?0的显C出满条g的第一?/p>

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

user1
user3

在来一个初U的又增加了(jin)一?#8220;if($5>20 || $5==10)”    做逻辑判断逻辑判断的三?#8220;|| && !” 或、与、非三个可以L加到里面Q这个语句的意思是如果W?列大?0或者等?0的都昄处理Q在我们的工作中可能有用户会(x)要求扑և所有空间大于多的或者是I间{于多少的̎L(fng)后再做批量修攏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 }


学习(fn)awk可以l常使用一下man awk 可以看到所有的函数和用方法?nbsp;  

?jin)解每个W号的意义我们才能更好的使用awkQ最开始先C几个命o(h)知道他可实现的结果我们慢慢的再去理解?br /> ================================================================================

    awk中񔽋?/p>

q里Z介绍一下vi的一个替换命令,现在我们要把example1.txt文本里的I格都替换ؓ(f)“:”冒号q里在vi里用的命o(h)是Q?/p>

%s/ /:/g     

q个命o(h)对于使用vi的h来说是用得最多的。我们现在做?jin)一个新的文件example2.txt?/p>

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

现在我们来做一个awk脚本Q之前都是在命o(h)行操作,实际上所有的操作在命令行上是可以都实现的Q已我们最l常使用的批量添加用h开始!script1.awk

#!/bin/awk -f   # 当文件有可执行权限的时候你可以直接执行
                # ./script1.awk example2.txt
                # 如果没有以上q行可能?x)出现错误,或?br />                 # awk -f script1.awk example2.txt 参数f指脚本文?

BEGIN {         # “BEGIN{”是awk脚本开始的地方
    FS=":";     # FS 是在awk里指分割W的意?br /> }

{                                # 接下来的“{” 是内定w?br />       print "add {";             # 一下都是用了(jin)一个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(fng)例子
[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?x)自动在行尾l出I格Q而printf是需要给?\n"的,如果感兴你可以?#8220;\n”L看一下结果?s代表字符?d 代表数字Q基本上%s都可以处理了(jin)因ؓ(f)在文本里一切都可以看成是字W串Q不像C语言{其他语aq要区分数字、字W、字W串{?/p>


文章出处Qhttp://www.diybl.com/course/3_program/shell/shelljs/200862/119688.html

awkq有一些很好的函数l细研究一下还是很好用的?br /> q次到?jin)一个问题客h一个用户列?大概?w用户Q他有一个有的工作要做Q就是把每个账户目录攑ֈ特定的目录下Q例?3910011234q个目录要放?39/10/q个目录下,从这里可以看?gu)律是手机L(fng)的前三位是二U目录名Q手机的W??为是三目录名,我们有的只有一个用户列表,规律扑ֈ?jin)我们现在开始想办法处理吧?/p>

example3.txt

13910011234     
15920312343
13922342134
15922334422
......

W一步是要找C个方法来吧,是要把每一个手机号分开Q最初可能你׃(x)惛_q个也没有Q何间隔,我们怎么用awk分开他们呢?说实话最初我也考虑?0多分钟,后来惌v原来学习(fn)python的时候有split函数可以分就x(chng)找awk里是不是有类似的函数Qman 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回自己做一下,最后我们就得到?jin)我们想要的l果?/p>

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

把这部分输出拯C个shell脚本里,在数据当前目录下执行可以了(jin)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函数解释Qs代表我们要处理的字符Ԍi 是我们从q个字符串的W几个位|上开始,n 是我们从开始的位置取多个字符。多看看man英文也会(x)有所提高的?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(h)做一个时间戳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一些了(jin)Q?br />  ================================================================================
 awk高񔽋?br />  
 不管学习(fn)M语言Q我们学到的都是工具Q工L(fng)道的多Q我们做起工作来p方便Q但是工具在你的手里q不一定能造出好的产品Q编辑脚本和~程序也是一L(fng)重要的是法Q别Z知道怎么处理的问题(sh)要知道如何处理。这才能证明你比别h更高Q工具只要你慢慢l习(fn)都会(x)使用?br />  
    下面l大家一个我认ؓ(f)是比较高U的问题?sh)(jin),感兴的可以自己再想x(chng)好的解决办法?/p>


 

问题是这L(fng)我们有一个从ldap里导出的文gQ它都是一行一个字D|说明的,每个用户的数据是已空行分割的。我们必L对应的uid 和userPassword扑և来而且是对应的?br />    
    例子Qexample4.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一个是IQ一个是冒号?br /> 冒号我们awk -F:可以了(jin)Q不q空行我们不好判断现在想到l(f)ength()q个函数Q在unix里空行最多只有一个\n字符Q如果一行字W数于2我们判断为空行,好现在间隔符号问题解冻II只能通过循环来实现对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 {

}

实际上对于学?fn)语a首先是熟(zhn)一些常用的函数Q然后就是试着去解军_册的问题,然后自己再思考一下是不是有更好,速度更快的解军_法,实际上大部分的程序员都是在重复的使用着别h好的解决办法Q把别h的方法{变(sh)ؓ(f)自己的方法,是反复l习(fn)解决不同的问题,思考更好的Ҏ(gu)Q?/p>


文章出处Qhttp://www.diybl.com/course/3_program/shell/shelljs/200862/119688_4.html



]]>
Linux Grep命o(h)使用的详l介l?/title><link>http://www.tkk7.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.tkk7.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,全面搜烦(ch)正则表达式ƈ把行打印出来)是一U强大的文本搜烦(ch)工具Q它能用正则表辑ּ搜烦(ch)文本Qƈ把匹配的行打印出来。Unix的grep家族包括grep?egrep和fgrep。egrep和fgrep的命令只跟grep有很不同。egrep是grep的扩展,支持更多的re元字W, fgrep是 fixed grep或fast grepQ它们把所有的字母都看作单词,也就是说Q正则表辑ּ中的元字W表C回其自w的字面意义Q不再特D。linux 使用GNU版本的grep。它功能更强Q可以通过-G?E?F命o(h)行选项来用egrep和fgrep的功能?/p> <p>  grep的工作方式是q样的,它在一个或多个文g中搜索字W串模板。如果模板包括空|则必被引用Q模板后的所有字W串被看作文件名。搜索的l果被送到屏幕Q不影响原文件内宏V?/p> <p>  grep可用于shell脚本Q因为grep通过q回一个状态值来说明搜烦(ch)的状态,如果模板搜烦(ch)成功Q则q回0Q如果搜索不成功Q则q回1Q如果搜索的文g不存在,则返?。我们利用这些返回值就可进行一些自动化的文本处理工作?/p> <p>  2. grep正则表达式元字符?基本?</p> <p>  ^</p> <p>  锚定行的开?如:(x)'^grep'匚w所有以grep开头的行?/p> <p>  $</p> <p>  锚定行的l束 如:(x)'grep$'匚w所有以grepl尾的行?/p> <p>  匚w一个非换行W的字符 如:(x)'gr.p'匚wgr后接一个Q意字W,然后是p?/p> <p>  *</p> <p>  匚w零个或多个先前字W?如:(x)'*grep'匚w所有一个或多个I格后紧跟grep的行?.*一L(fng)代表L字符?/p> <p>  []</p> <p>  匚w一个指定范围内的字W,?[Gg]rep'匚wGrep和grep?/p> <p>  [^]</p> <p>  匚w一个不在指定范围内的字W,如:(x)'[^A-FH-Z]rep'匚w不包含A-R和T-Z的一个字母开_(d)紧跟rep的行?/p> <p>  \(..\)</p> <p>  标记匚w字符Q如'\(love\)'Qlove被标Cؓ(f)1?/p> <p>  \<</p> <p>  锚定单词的开始,?'\\></p> <p>  锚定单词的结束,?grep\>'匚w包含以grepl尾的单词的行?/p> <p>  x\{m\}</p> <p>  重复字符xQmơ,如:(x)'0\{5\}'匚w包含5个o的行?/p> <p>  x\{m,\}</p> <p>  重复字符x,臛_mơ,如:(x)'o\{5,\}'匚w臛_?个o的行?/p> <p>  x\{m,n\}</p> <p>  重复字符xQ至mơ,不多于nơ,如:(x)'o\{5,10\}'匚w5--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(fng)?/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'匚wgr后跟一个或没有字符Q然后是p的行?/p> <p>  a|b|c</p> <p>  匚wa或b或c。如Qgrep|sed匚wgrep或sed</p> <p>  ()</p> <p>  分组W号Q如Qlove(able|rs)ov+匚wloveable或loversQ匹配一个或多个ov?/p> <p>  x{m},x{m,},x{m,n}</p> <p>  作用同x\{m\},x\{m,\},x\{m,n\}</p> <p><br /> 文章出处QDIY部落(http://www.diybl.com/course/3_program/shell/shelljs/20090216/155758.html)</p> <img src ="http://www.tkk7.com/lingy/aggbug/271481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/lingy/" target="_blank">林光?/a> 2009-05-19 10:38 <a href="http://www.tkk7.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"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://bdgxhome.com" target="_blank"></a>| <a href="http://w7768.com" target="_blank">þþþѿ</a>| <a href="http://266my.com" target="_blank">Ѵ߹</a>| <a href="http://baoyutv777.com" target="_blank">˳ɵӰվþ</a>| <a href="http://bjgelinhotel.com" target="_blank">avպۺһ</a>| <a href="http://youketech.com" target="_blank">99þó˹Ʒ</a>| <a href="http://fkg675.com" target="_blank">ҹƷƵ</a>| <a href="http://jinmenonline.com" target="_blank">Ůڵվ</a>| <a href="http://ahzlgj.com" target="_blank">AVþþƷ</a>| <a href="http://55xxb.com" target="_blank">޾Ʒ߳ˮAƬ</a>| <a href="http://amjt9.com" target="_blank">ðѾƷƵ</a>| <a href="http://taixin668.com" target="_blank">ѾƷ߶</a>| <a href="http://jiezinet.com" target="_blank">Ʒ޶߹ۿ</a>| <a href="http://chowngroup.com" target="_blank">91޾Ʒ߹ۿ</a>| <a href="http://szwangzhongwang.com" target="_blank">պƷƵ</a>| <a href="http://9527paotui.com" target="_blank">ѻɫַվ</a>| <a href="http://smalody.com" target="_blank">þþþavëƬ</a>| <a href="http://www-774220.com" target="_blank">¹Ʒ</a>| <a href="http://yutuzb.com" target="_blank">òƵѹۿ</a>| <a href="http://9aiba.com" target="_blank">avҹƷһ </a>| <a href="http://my94ok.com" target="_blank">AV߹ۿ</a>| <a href="http://yg1617.com" target="_blank">޹˾ƷҰһ</a>| <a href="http://dstbxg.com" target="_blank">þƵվ</a>| <a href="http://dzhyyy.com" target="_blank">Ѵվ߿</a>| <a href="http://www52a.com" target="_blank">þþþþƷAV</a>| <a href="http://33sse.com" target="_blank">ӰԺMV߹ۿƵ </a>| <a href="http://hkschooltv.com" target="_blank">69ʽƵ</a>| <a href="http://www-44455588.com" target="_blank">Ʒ޾Ʒպѷ</a>| <a href="http://baizhengsh.com" target="_blank">ŷպٲ </a>| <a href="http://555yyyy.com" target="_blank">һ˿www߸ѿ</a>| <a href="http://777vip8.com" target="_blank">Ļղapp</a>| <a href="http://ymtphoto.com" target="_blank">Ůۺɫһ </a>| <a href="http://mironpress.com" target="_blank">Ʒ_˳߸</a>| <a href="http://gstywy.com" target="_blank">޾Ʒþ</a>| <a href="http://888xxss.com" target="_blank">ŷ˳ɾƷѹۿ</a>| <a href="http://6f2igoa4.com" target="_blank">츾þþ</a>| <a href="http://cdessc.com" target="_blank">Ʒһ </a>| <a href="http://5138k.com" target="_blank">պëƬһ</a>| <a href="http://koukoub.com" target="_blank">߹ۿѴվ</a>| <a href="http://www79909c.com" target="_blank">޾Ʒŷ޾Ʒ</a>| <a href="http://ccc998.com" 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>
标签Q?span id="tagsBox">sed 
sed ~辑器是 Linux pȝ理员的工具包中最有用的资产之一Q?
因此Q有必要dC(jin)解其应用

Linux 操作pȝ最大的一个好处是它带有各U各L(fng)实用工具。存在如此之多不同的实用工具Q几乎不可能知道q了(jin)解所有这些工兗可以简化关键情况下操作的一个实用工h sed。它是Q何管理员的工具包中最强大的工具之一Qƈ且可以证明它自己在关键情况下非常有h(hun)倹{?

sed 实用工具是一?#8220;~辑?#8221;Q但它与其它大多数编辑器不同。除?jin)不面向屏幕之外Q它q是非交互式的。这意味着(zhn)必d要对数据执行的命令插入到命o(h)行或要处理的脚本中。当昄它时Q请忘记(zhn)在使用 Microsoft Word 或其它大多数~辑器时拥有的交互式~辑文g功能。sed 在一个文Ӟ或文仉Q中非交互式、ƈ且不加询问地接收一pd的命令ƈ执行它们。因而,它流l文本就如同水流l溪一P因?sed 恰当C表了(jin)编辑器。它可以用来所有出现的 "Mr. Smyth" 修改?"Mr. Smith"Q或?"tiger cub" 修改?"wolf cub"。流~辑器非帔R合于执行重复的~辑Q这U重复编辑如果由人工完成花费大量的旉。其参数可能和一ơ性用一个简单的操作所需的参Ch限,或者和一个具有成千上万行要进行编辑修改的脚本文g一样复杂。sed ?Linux ?UNIX 工具׃最有用的工具之一Q且使用的参数非常少?

sed 的工作方?

sed 实用工具按顺序逐行文件读入到内存?sh)。然后,它执行ؓ(f)该行指定的所有操作,q在完成h的修改之后将该行攑֛到内存(sh)Q以其转储至终端。完成了(jin)q一行上的所有操作之后,它读取文件的下一行,然后重复该过E直到它完成该文件。如同前面所提到的,默认输出是将每一行的内容输出到屏q上。在q里Q开始涉?qing)到两个重要的因素—首先,输出可以被重定向到另一文g中,以保存变化;W二Q源文gQ默认地Q保持不被修攏Vsed 默认d整个文gq对其中的每一行进行修攏V不q,可以按需要将操作限制在指定的行上?

该实用工L(fng)语法为:(x)


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

在这文章中Q我们将览最常用的命令和选项Qƈ演示它们如何工作Q以?qing)它们适于在何处用?

替换命o(h)

sed 实用工具以及(qing)其它McM的编辑器的最常用的命令之一是用一个值替换另一个倹{用来实现这一目的的操作的命o(h)部分语法是:(x)


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

因而,下面演示?jin)如何非常简单地?"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(h)输出Q则不需要指定文件名—同L(fng)原则也适用?awk、sort 和其它大多数 LinuxUNIX 命o(h)行实用工L(fng)序?

多次修改

如果需要对同一文g或行作多ơ修改,可以有三U方法来实现它。第一U是使用 "-e" 选项Q它通知E序使用?jin)多条编辑命令。例如:(x)


$ 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" 选项不常被大范围使用。更好的Ҏ(gu)是用分号来分隔命令:(x)


$ 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返回一条错误消息。这两种Ҏ(gu)都很好,但许多管理员更喜Ƣ另一U方法。要注意的一个关键问题是Q两个撇?(' ') 之间的全部内定w被解释ؓ(f) sed 命o(h)。直到?zhn)输入了(jin)第二个撇号Q读入这些命令的 shell E序才会(x)认ؓ(f)(zhn)完成了(jin)输入。这意味着可以在多行上输入命o(h)—同?Linux 提C符?PS1 变(sh)ؓ(f)一个gl提C符Q通常?">"Q—直到输入了(jin)W二个撇受一旦输入了(jin)W二个撇Pq且按下?Enter 键,则处理就q行q生相同的l果Q如下所C:(x)


$ 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(jin)多次要修改的目。默认方式下Q结果可能和预期的有所不同Q如下所C:(x)


$ 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" 相反Qsed ~辑器在扑ֈ一个要修改的项目ƈ作了(jin)修改之后l箋(hu)处理下一行,而不L行。sed 命o(h)功能大体上类g替换命o(h)Q这意味着它们都处理每一行中出现的第一个选定序列。ؓ(f)?jin)替换出现的每一个项目,在同一行中出现多个要替换的目的情况下Q?zhn)必须指定在全局q行该操作:(x)


$ 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
$

误住不?zhn)要查扄序列是否仅包含一个字W或词组Q这U对全局化的要求都是必需的?

sed q可以用来修改记录字D分隔符。例如,以下命o(h)把所有的 tab 修改为空|(x)


sed 's// /g'

其中Q第一l斜U之间的目是一?tabQ而第二组斜线之间的项目是一个空根{作Z条通用的规则,sed 可以用来Q意的可打印字W修改ؓ(f)L其它的可打印字符。如果?zhn)惛_不可打印字符修改为可打印字符—例如,铃铛修改为单?"bell"—sed 不是适于完成q项工作的工P?tr 是)(j)?

有时Q?zhn)不想修改在一个文件中出现的所有指定项目。有Ӟ(zhn)只惛_满某些条g时才作修改—例如,在与其它一些数据匹配之后才作修攏Vؓ(f)?jin)说明这一点,误(g)虑以下文本文gQ?


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

假定希望?"2" 来替?"1"Q但仅在单词 "two" 之后才作替换Q而不是每一行的所有位|。通过指定在给出替换命令之前必d在一ơ匹配,可以实现q一点:(x)


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

现在Q其更加准:(x)


$ 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
$

请再ơ记住唯一改变?sh)(jin)的是显C。如果?zhn)查看源文Ӟ?zhn)将发现它始l保持不变。?zhn)必须输Z存至另一个文Ӟ以实现永久保存。值得重复的是Q不Ҏ(gu)文g作修改实际是怸有福—它让?zhn)能够?gu)件进行试验而不?x)造成M实际的损宻I直到让正命令以(zhn)预期和希望的方式进行工作?

以下命o(h)修改后的输Z存至一个新的文Ӟ(x)


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

该输出文件将所有修改合q在其中Qƈ且这些修攚w常在屏幕上显C。现在可以用 head、cat 或Q意其它类似的实用工具来进行查看?

脚本文g

sed 工具允许(zhn)创Z个脚本文Ӟ其中包含从该文g而不是在命o(h)行进行处理的命o(h)Qƈ?sed 工具通过 "-f" 选项来引用。通过创徏一个脚本文Ӟ(zhn)能够一ơ又一ơ地重复q行相同的操作,q指定比每次希望从命令行q行处理的操作详l得多的操作?

考虑以下脚本文gQ?


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

现在可以在数据文件上使用脚本文gQ获得和我们之前看到的相同的l果Q?


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

注意当调?"-f" 选项Ӟ在源文g内或命o(h)行中不用撇受脚本文Ӟ也称为源文gQ对于想重复多次的操作和从命令行q行可能出错的复杂命令很有h(hun)倹{编辑源文gq修改一个字W比在命令行中重新输入一条多行的目要容易得多?

限制?

~辑器默认查看输入到编辑器中的每一行,且默认在输入到流~辑器中的每一行上q行~辑。这可以通过在发出命令之前指定约束条件来q行修改。例如,只在此示例文件的输出的第 5 和第 6 行中?"2" 来替?"1"Q命令将为:(x)


$ 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所以不需要替换命令。因此,(zhn)可以灵zdҎ(gu)匚w准则Q可以是行号或一U匹配模式)(j)来选择要修改哪些行Q从Ҏ(gu)上限制修改)(j)?

止昄

sed 默认来自源文g的每一行显C到屏幕上(或重定向C个文件中Q,而无行是否受到编辑操作的影响Q?-n" 参数覆盖?jin)这一操作?-n" 覆盖?jin)所有的昄Qƈ且不昄M一行,而无论它们是否被~辑操作修改。例如:(x)


$ sed -n -f sedlist sample_one
$

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

在第一个示例中Q屏q上不显CZQ何东ѝ在W二个示例中Q不修改M东西Q因此不Q何东西写到新的文件中—它最后是I的。这不是否定?jin)编辑的全部目的吗?Z么这是有用的Q它是有用的仅因?"-n" 选项能够被一条显C命?(-p) 覆盖。ؓ(f)?jin)说明这一点,假定现在像下面这样对脚本文gq行?jin)修改?x)


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

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


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

保持不变的行全部不被昄。只有受到编辑操作媄(jing)响的行被昄?jin)。在q种方式下,可以仅取?gu)些行Q进行修改,然后把它们放C个单独的文g中:(x)


$ sed -n -f sedlist sample_one > sample_two
$

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

利用它的另一U方法是只显CZ定数量的行。例如,只显C?2-6 行,同时不做其它的编辑修改:(x)


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

其它所有的行被忽略Q只?2-6 行作出显C。这是一出色的功能Q其它Q何工具都不能Ҏ(gu)地实现。Head 显CZ个文件的剙Q?tail 显CZ个文件的底部Q但 sed 允许从Q意位|取出想要的L内容?

删除?

用一个值替换另一个D非流~辑器可以执行的唯一功能。它q具有许多的潜在功能Q在我看来第二种最常用的功能是删除。删除与替换的工作方式相同,只是它删除指定的行(如果(zhn)想要删除一个单词而不是一行,不要考虑删除Q而应考虑用空的内Ҏ(gu)替换它—s/cat//Q?

该命令的语法是:(x)


'{what to find} d'

?sample_one 文g中删除包?"two" 的所有行Q?


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

从显C屏中删除前三行Q而不它们的内容是什么:(x)


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

只显C剩下的行,前三行不在显C屏中出现。对于流~辑器,一般当它们涉及(qing)到全局表达式时Q特别是应用于删除操作时Q有几点要记住:(x)

上三角号 (^) 表示一行的开始,因此Q如?"two" 是该行的头三个字W,?


sed '/^two/ d' sample_one

只删除该行?
元W号 ($) 代表文g的结,或一行的l尾Q因此,如果 "two" 是该行的最后三个字W,?


sed '/two$/ d' sample_one

只删除该行?

这两者结合在一L(fng)l果Q?


sed '/^$/ d' {filename}

删除文g中的所有空白行。例如,以下命o(h)?"1" 替换?"2"Q以?qing)?"1" 替换?"3"Qƈ删除文g中所有尾随的IQ?


$ 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中所有的行,从第一行直到第一个空行:(x)


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

d和插入文?

可以l合使用 sed ?"a" 选项文本添加到一个文件的末尾。实现方法如下:(x)


$ 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(h)中,元W号 ($) 表示文本被d到文件的末尾。反斜线 () 是必需的,它表C将插入一个回车符。如果它们被遗漏?jin),则将D一个错误,昄该命令是错ؕ的;在Q何要输入回R的地Ҏ(gu)必须使用反斜Uѝ?

要将q些行添加到W?4 和第 5 个位|而不是末,则命令变?sh)?x)


$ 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(zhn)可以选择插入而不是添加(如果(zhn)希望这L(fng)话)(j)。这两者的区别是添加跟在指定的行之后,而插入从指定的行开始。当用插入来代替dӞ只需?"i" 来代?"a"Q如下所C:(x)


$ 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箋(hu)q行?

d文g

重定向输出的功能已经演示q了(jin)Q但需要指出的是,在编辑命令运行期间可以同步地d和写出文件。例如,执行替换Qƈ?1-3 行写到名UCؓ(f) 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(h)指定?"1,3"Q所以只有指定的行被写到?jin)新文g中。无写的是哪些行Q所有的行都在默认输Z昄?

修改命o(h)

除了(jin)替换目之外Q还可以行从一个g改ؓ(f)另一个倹{要C的是Q替换是对字W逐个q行Q而修改功能与删除cMQ它影响整行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(h)与替换的工作方式很相|但在范围上要更大些—将一个项目完全替换ؓ(f)另一个项目,而无论字W内Ҏ(gu)上下文。夸张一点讲Q当使用替换Ӟ只有字符 "1" 被字W?"2" 替换Q而当使用修改Ӟ原来的整行将被修攏V在两种情况下,要寻扄匚w条g都仅?"two"?

修改全部?#8230;…

对于大多?sed 命o(h)Q详l说明各U功能要q行何种修改。利用感叹号Q可以在除指定位|之外的M地方执行修改—与默认的操作完全相反?

例如Q要删除包含单词 "two" 的所有行Q操作ؓ(f)Q?


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

而要删除除包含单?"two" 的行之外的所有行Q则语法变(sh)ؓ(f)Q?


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

如果(zhn)有一个文件包含一pd目Qƈ且想Ҏ(gu)件中的每个项目执行一个操作,那么首先寚w些项目进行一ơ智能扫描ƈ考虑要做什么是很重要的。ؓ(f)?jin)事情变得更简单,(zhn)可以将 sed 与Q意P代例E(for、while、untilQ结合来实现q一目的?

比如_(d)假定(zhn)有一个名?"animals" 的文Ӟ其中包含以下目Q?

pig
horse
elephant
cow
dog
cat

(zhn)希望运行以下例E:(x)


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

l果ؓ(f)Q每一行都昄?"Old McDonald has a" 的末。虽然对于这些项目的大部分这是正的Q但对于 "elephant" 目Q它有语法错误,因ؓ(f)l果应当?"an elephant" 而不?"a elephant"。利?sedQ?zhn)可以在来?shell 文g的输Z(g)查这U语法错误,q过首先创徏一个命令文件来x(chng)地更正它们:(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 脚本之后Qsed 在输出中搜索单个字?a Q空|"a"Q空|(j)之后紧跟?jin)一个元音的L位置。如果这U位|存在,它将把该序列修改为空|"an"Q空根{这样就佉K题更正后才显C在屏幕上,q确保各处的~辑人员在晚上可以更Ҏ(gu)地入睡。结果是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整个文gQƈ只在到达末尾时才停止。不q,(zhn)可以用退出命令提前停止处理。只能指定一条退出命令,而处理将一直持l直到满用退出命令的条g?

例如Q仅在文件的前五行上执行替换Q然后退出:(x)


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

在退出命令之前的目可以是一个行P如上所C)(j)Q或者一条查?匚w命o(h)Q?


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

(zhn)还可以使用退出命令来查看过一定标准数目的行,q增加比 head 中的功能更强的功能。例如,head 命o(h)允许(zhn)指定?zhn)惌查看一个文件的前多行—默认数?10Q但可以使用?1 ?99 的Q意一个数字。如果?zhn)x(chng)看一个文件的?110 行,(zhn)用 head 不能实现q一目的Q但?sed 可以Q?


sed 110q filename

处理问题

当?sed Ӟ要记住的重要事项是它的工作方式。它的工作方式是Q读入一行,在该行上执行它已知要执行的所有Q务,然后l箋(hu)处理下一行。每一行都受给定的每一个编辑命令的影响?

如果(zhn)的操作序没有十分d地考虑清楚Q那么这可能?x)很ȝ?ch)。例如,假定(zhn)需要将所有的 "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" 被修改ؓ(f) "three"。然后它满Z一ơ编辑徏立的准则Q从而变?sh)?"four"。最l的l果不是惌的结果—现在除?"four" 没有别的目?jin),而本来应该有 "three" ?"four"?

当执行这U操作时Q?zhn)必须非常用?j)地注意指定操作的方式Qƈ按某U顺序来安排它们Q得操作之间不?x)互相?jing)响。例如:(x)


$ 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非常有效,因ؓ(f) "three" 值在 "two" 变成 "three" 之前得到修改?

标签和注?

可以?sed 脚本文g中放|标{,q样一旦文件变得庞大,可以更容易地说明正在发生的事情。存在各U各样与q些标签相关的命令,它们包括Q?
接下来的步骤

讉Kq收?Linux 技术中?

阅读 Dale Dougherty ?Arnold Robbins 的著?sed & awk, 2nd Edition QO'Reilly & Associates 出版C)(j)?

: 冒号表示一个标{֐U。例如:(x)


:HERE

以冒号开始的标签可以?"b" ?"t" 命o(h)处理?

b {label} 充当 "goto" 语句的作用,处理发送至前面有一个冒L(fng)标签。例如,


b HERE

处理发送给?


:HERE

如果紧跟 b 之后没有指定M标签Q则处理转至脚本文g的末?

t {label} 只要自上ơ输入行或执行一?"t" 命o(h)以来q行?jin)替换操作,p{臌标签。和 "b" 一P如果没有l定标签名,则处理{臌本文件的末尾?

# W号作ؓ(f)一行的W一个字W将使整行被当作注释处理。注释行与标{不同,不能使用 b ?t 命o(h)来{到注释行上?/div>


]]>重要的几个热键[Tab], [ctrl]-c, [ctrl]-dhttp://www.tkk7.com/lingy/archive/2009/05/24/277640.html林光?/dc:creator>林光?/author>Sun, 24 May 2009 01:56:00 GMThttp://www.tkk7.com/lingy/archive/2009/05/24/277640.html在l后面的章节之前Q这里很需要跟大家再来报告一件事Q那是我们的文字模式里头具有很多的功能按键Q?q些按键可以辅助我们q行指o(h)的编写与E序的中断呢Q这几个按键请大家务必要C的!很重要喔Q?br />• [Tab] 按键
[Tab] 按键是在键盘的大写灯切换按?[Caps Lock])上面的那个按键! 在各U?Unix-Like ?Shell 当中Q这?[Tab] 按键是 Linux ?Bash shell 最的功能之一?jin)?他具有『命令补全』与『档案补齐』的功能喔!可以让我们少打很多字Q但重点是, 可以避免我们打错指o(h)或文件名U呢Q很吧Q但?[Tab] 按键在不同的地方输入Q会(x)有不一L(fng)l果喔! 我们举下面的例子来说明。上一节我们不是提到 cal q个指o(h)吗?如果我在指o(h)列输?ca 再按两次 [tab] 按键Q会(x)出现什么讯息?
[root@linux ~]# ca[tab][tab] <==[tab]按键是紧接在 a 字母后面Q?br /># 上面?[tab] 指的是『按下那个tab键』,不是要?zhn)输?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(h)都被昄出来啦!很不错吧Q?那如果你输入 ls -al ~/.bash 两个 [tab] ?x)出C么?
[root@linux ~]# ls -al ~/.bash[tab][tab]
.bash_history .bash_logout .bash_profile .bashrc
咦!在该目录下面所有以 .bash 的文件名U都?x)被昄出来了(jin)呢Q注意看上面两个例子喔, 我们?[tab] 按键的地方如果是?command (W一个输入的数据) 后面Ӟ他就代表着 『命令补全』,如果是接在第二个字以后的Q就?x)变成『档案补齐』的功能?jin)?br />• [Tab] 接在一串指令的W一个字的后面,则ؓ(f)命o(h)补全Q?br />• [Tab] 接在一串指令的W二个字以后Ӟ则ؓ(f)『档案补齐』!
善用 [tab] 按键真的是个很好的习(fn)惯!可以让?zhn)避免掉很多输入错误的Z(x)Q!Q?br />• [Ctrl]-c 按键
?Linux 底下Q如果?zhn)输入了(jin)错误的指o(h)或参敎ͼ 有的时候这个指令或E序?x)在pȝ底下『跑不停』这个时候怎么办?别担?j)?如果(zhn)想让当前的E序『停掉』的话,可以输入Q[Ctrl] ?c 按键 (先按着 [Ctrl] 不放Q且再按?c 按键Q是l合按键Q?Q?那就?中断目前E序 的按键啦Q?举例来说Q如果?zhn)输入了(jin)?find / -type vbird 』这个指令时Q?pȝ?x)开始跑一些东?(先不要理?x)这个指令串的意?Q此时你l他按下 [Ctrl]-c l合按键Q嘿嘿!是否立刻发现q个指o(h)串被l止?jin)!是q样的意思啦Q?不过你应该要注意的是Q这个组合键是可以将正在q作中的指o(h)中断的, 如果(zhn)正在运作比较重要的指o(h)Q可别急着使用q个l合按键喔! ^_^
• [Ctrl]-d 按键
那么 [Ctrl]-d 是什么呢Q就?[Ctrl] ?d 按键的组合啊Q这个组合按键通常代表着Q?『键盘输入结?(End Of File, EOF ?End Of Input)』的意思! 另外Q他也可以用来取?exit 的输入呢Q例如?zhn)惌直接d文字接口Q?可以直接按下 [Ctrl]-d p够直接离开?相当于输?exit 啊!)?br />MQ在 Linux 底下Q文字接口的功能是很强?zhn)的!要多多的学?fn)他, 而要学习(fn)他的基础要诀是......多用、多熟?zhn)啦?

]]>
find命o(h)http://www.tkk7.com/lingy/archive/2009/05/23/277600.html林光?/dc:creator>林光?/author>Sat, 23 May 2009 11:49:00 GMThttp://www.tkk7.com/lingy/archive/2009/05/23/277600.html

  功能Q在目录l构中搜索文Ӟq执行指定的操作。此命o(h)提供?jin)相当多的查找条Ӟ功能很强大?

  语法Qfind 起始目录 L条g 操作

  说明Qfind命o(h)从指定的起始目录开始,递归地搜索其各个子目录,查找满L条g的文件ƈ对之采取相关的操作?

  该命令提供的L条g可以是一个用逻辑q算Wnot、and、orl成的复合条件。逻辑q算Wand、or、not的含义ؓ(f)Q?

  Q?QandQ逻辑与,在命令中?#8220;-a”表示Q是pȝ~省的选项Q表C只有当所l的条g都满x(chng)Q寻找条件才满뀂例如:(x)

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

  该命令寻找三个给定条仉满的所有文件?

  Q?QorQ逻辑或,在命令中?#8220;-o”表示。该q算W表C只要所l的条g中有一个满x(chng)Q寻找条件就满?

  例如Q?

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

  该命令查询文件名?#8217;tmp’或是匚w’mina*’的所有文件?

  Q?QnotQ逻辑非,在命令中?#8220;Q?#8221;表示。该q算W表C查找不满所l条件的文g?

  例如Q?

  $ find ! –name ’tmp’

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

  需要说明的是:(x)当用很多的逻辑选项Ӟ可以用括hq些选项括v来。ؓ(f)?jin)避免Shell本nҎ(gu)号引赯解,在话号前需要加转义字符“\\”来去除括L(fng)意义?

  例:(x)$ find \\Q?#8211;name ’tmp’ –xtype c -user ’inin’ \\Q?L条g有以下选项Q?

  首先Q下列各个选项中的n值可以有三种输入方式Q假设n?0Q则Q?

  +20 表示20以后Q?1Q?2Q?3{)(j)

  -20 表示20以前Q?9Q?8Q?7{)(j)

  20 表示正好?0

  1. 以名U和文g属性查找?

  - name ’字串’ 查找文g名匹配所l字串的所有文Ӟ字串内可用通配W??、[ ]?

  - lname ’字串’ 查找文g名匹配所l字串的所有符号链接文Ӟ字串内可用通配W??、[ ]?

  -gid n 查找属于ID号ؓ(f)n的用L(fng)的所有文件?

  -uid n 查找属于ID号ؓ(f)n的用L(fng)所有文件?

  -group ’字串’ 查找属于用户l名为所l字串的所有的文g?

  -user ’字串’ 查找属于用户名ؓ(f)所l字串的所有的文g?

  -empty 查找大小?的目录或文g?

  -path ’字串’ 查找路径名匹配所l字串的所有文Ӟ字串内可用通配W??、[ ]?

  -perm 权限 查找h指定权限的文件和目录Q权限的表示可以?11Q?44?

  -size n[bckw] 查找指定文g大小的文Ӟn后面的字W表C单位,~省为bQ代?12字节的块?

  -type x 查找cd为x的文ӞxZ列字W之一Q?

  b 块设备文?

  c 字符讑֤文g

  d 目录文g

  p 命名道QF(tun)IFOQ?

  f 普通文?

  l W号链接文gQsymbolic linksQ?

  s socket文g

  -xtype x ?type基本相同Q但只查扄号链接文件?

  2. 以时间ؓ(f)条g查找

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

  - atime n 查找n天以前被讉Kq的所有文件?

  - cmin n 查找n分钟以前文g状态被修改q的所有文件?

  - ctime n 查找n天以前文件状态被修改q的所有文件?

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

  - mtime n 查找n天以前文件内容被修改q的所有文件?

  3. 可执行的操作

  - exec 命o(h)名称 {} 对符合条件的文g执行所l的Linux 命o(h)Q而不询问用户是否需要执行该命o(h)。{}表示命o(h)的参数即为所扑ֈ的文Ӟ命o(h)的末ֿM“ \\Q?#8221;l束?

  - ok 命o(h)名称 { } 对符合条件的文g执行所l的Linux 命o(h)Q与exec不同的是Q它?x)询问用h否需要执行该命o(h)?

  - ls 详细列出所扑ֈ的所有文件?

  - fprintf 文g?找到的文g名写入指定文件?

  - print 在标准输?gu)备上昄查找出的文g名?

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

  ?Q查扑ֽ前目录中所有以main开头的文gQƈ昄q些文g的内宏V?

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

  ?Q删除当前目录下所有一周之内没有被讉Kq的a .out?.o文g?

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

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

  说明如下Q?命o(h)中的“.”表示当前目录Q此时find从当前目录开始,逐个在其子目录中查找满后面指定条g的文件。\\Q和\\Q表C括PQ,其中?#8220;\\”UCؓ(f)转义W。之所以这样写是由于对Shell而言Q(和)(j)另有不同的含义,而不是这里的用于l合条g的用途?#8220;- name a.out”是指要查扑֐为a.out的文Ӟ“- name ‘*.o’”是指要查找所有名字以 .ol尾的文件。这两个- name之间? o表示逻辑或(orQ,x(chng)扑֐字ؓ(f)a.out或名字以 .ol尾的文Ӟfind在当前目录及(qing)其子目录下找到这佯的文g之后Q再q行判断Q看其最后访问时间是否在7天以前(条gQatime +7Q,若是Q则对该文g执行命o(h)rmQ? exec rm{ }\\;Q。其中{ }代表当前查到的符合条件的文g名,\\Q则是语法所要求的。上q命令中W一行的最后一个\\是箋(hu)行符。当命o(h)太长而在一行写不下Ӟ可输入一个\\Q之后系l将昄一?gt;Q指C用L(fng)l输入命令?

  locate命o(h)

  locate命o(h)用于查找文gQ它比find命o(h)的搜索速度快,它需要一个数据库Q这个数据库由每天的例行工作QcrontabQ程序来建立。当我们建立好这个数据库后,可以方便地来搜L需文g?jin)?

  该命令的一般Ş式ؓ(f)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.tkk7.com/lingy/archive/2009/05/21/274623.html林光?/dc:creator>林光?/author>Thu, 21 May 2009 14:34:00 GMThttp://www.tkk7.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在不涉?qing)数据库服务器程序的父进E的停止q行Q也可以用这些工hl止。ؓ(f)什么数据库服务器的父进E不能用q些工具杀dQ原因很单,q些工具在强行终止数据库服务器时Q会(x)让数据库产生更多的文件碎片,当碎片达C定程度的时候,数据库就有崩溃的危险。比如mysql服务器最好是按其正常的程序关闭,而不是用pkill mysqld 或killall mysqldq样危险的动作;当然对于占用资源q多的数据库子进E,我们应该用kill 来杀掉?br /> 1. kill
kill的应用是和ps 或pgrep 命o(h)l合在一起用的Q?/strong>
kill 的用法:(x)
kill QM号代码]     q程ID
注:(x)信号代码可以省略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?zhn)也可以?font color="#0000ff">pgrep -l httpd
来查看;

我们看上面例子中的第二列Q就是进EPID的列Q其?font color="#0000ff">4830
是httpd服务器的父进E,?833Q?840的进E都是它4830的子q程Q如果我们杀掉父q程4830的话Q其下的子进E也?x)跟着LQ?br /> [root@localhost ~]# kill 4840 注:(x)杀?840q个q程Q?br /> [root@localhost ~]# ps -auxf |grep httpd 注:(x)查看一下会(x)有什么结果?是不是httpd服务器仍在运行?
[root@localhost ~]# kill 4830 注:(x)杀掉httpd的父q程Q?br /> [root@localhost ~]# ps -aux |grep httpd 注:(x)查看httpd的其它子q程是否存在Qhttpd服务器是否仍在运行?

对于僵尸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,׃单说一下就行了(jin)?br /> 用法Qkillall 正在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 应用Ҏ(gu)差不多,也是直接杀死运行中的程序;如果(zhn)想杀掉单个进E,L(fng)kill 来杀掉?br /> 应用Ҏ(gu)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 。当xkillq行时出来和个h脑骨的图标,哪个囑ŞE序崩溃一点就O(jin)K?jin)。如果?zhn)想终止xkill Q就按右键取消;
xkill 调用Ҏ(gu)Q?br /> [root@localhost ~]# xkill
?Linux的kill命o(h)与信h?/font>
信号是用来与守护E序和进E通信的。Q何活动Q务都是一个进E,而守护程序是{待Ҏ(gu)些事件做出反应或者按照日E安排执行Q务的后台服务。一个程序必L建在其中的信号处理程序用于捕获和应答信号。在LINUX中的signal参考指南解释了(jin)各种不同信号和这些信L(fng)用途。信h?#8220;kill”命o(h)发出的。kill -l命o(h)可以昄一个可用信号列表及(qing)其编受?br /> 所有的守护E序和进E都有一个进EID(PID)Q例如用ps命名所昄的内容:(x)
$ 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消耗了(jin)你的全部CPU或者内存,你可以在q个输出?CPU?MEM列中发现它们。找到失控的q程的一U更快捷的方法是使用top命o(h)Q因为按照默认的讄Q用占用CPU资源最多的q程在最上面昄。我们可以用一?#8220;yes”命o(h)来测试一?
$ yes carla is teh awesum
q个命o(h)以很高的速度反复昄“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
 分析一下这个结果,你会(x)发现一些有的事,你会(x)发现Q占用CPU最多的E序是konsole虚拟l端E序Q而不?#8220;yes”命o(h)Q这是因?#8220;yes”命o(h)是在konsolel端E序中运行的。如果在一?#8220;真正?#8221;控制?按Ctrl+alt+f2?中运行同L(fng)命o(h)序列Q你看?#8220;yes”命o(h)被排在第一位?br /> 有许多停?#8220;yes”命o(h)q行的方式。如果你要回到运行它的shell中,按CTRL+c键就可以?jin)。或者你可以在另一个shell中用“kill”命o(h)停止“yes”命o(h)的运行,Kill命o(h)后面跟PID或者命令名Uͼ如下如示:
$ kill 22236
或?br /> $ killall yes
按CTRL+c键发Z个SIGINTQ信?Q,q个信号是键盘要求取得控制权的中断信受kill和killallq两个命令按照默认的讄都发Z个SIGTERM信号(~号15)。程序中可以讄对SIGTERM信号(15)是捕捉或者忽略,或者以不同的方式解释。因此,如果你的E序对于KILL命o(h)的反应与你预期不同,很可能是被KILL的目标程序的问题?br /> l止一个父q程通常也终止了(jin)它的子进E。不q,情况q不L如此。你知道子进E是什么吗?使用ps命o(h)加上-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(chng)“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ͼ信号名称或者号码。那么ؓ(f)什么要q样做而不使用/etc/init.d/foo命o(h)重新启动?使用它们自己的init(初始?文g来控制服务是优先选择的方式,因ؓ(f)q些文g通常包含健全和错误检查以?qing)额外的功能。?#8220;kill”命o(h)和信L(fng)主要原因是尽可能明确地终止挂起和失控的进E,而不必重新启动或者登出?br /> l止q程
正如你在关于信号的man page中所看到的,有十几种控制q程的方法。下面是一些常用的Ҏ(gu):
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命o(h)l
Bash外壳包含一个内|的kill命o(h)Q当执行下面命o(h):
$ type -all kill
kill is a shell built-in
kill is /bin/kill
命o(h)的结果表明有两个kill命o(h)Q一个是BASH的内|命令,另一个是/bin/kill可执行程序。一般来说这两个命o(h)不太可能遇到冲突的情况,不过Q如果你实遇到?jin)kill命o(h)行ؓ(f)异常Ӟ你可以明的指定/bin/kill命o(h)?br /> 你一定要q一步查阅下面的资源中列出的参考资源来?jin)解Linux中kill的妙用,因ؓ(f)q是你进入维护Linuxpȝ领域的门。这些知识能够让你像做外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) - Ҏ(gu)名字和其它属性查看或者发?gu)E信?br /> skill (1) - 发送一个信h者报告进E状?br /> xkill (1) - 按照X资源消灭一个客L(fng)?br />
http://hi.baidu.com/zhujiawei/blog/item/9ed008f3154be2cd0b46e003.html