??xml version="1.0" encoding="utf-8" standalone="yes"?>
下面我把我遇到这个问题解决的Ҏ(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
]]>
用命令chown aurora.aurora aurora修改用户属主
知识点:(x)
1.查看用户l信?cat /etc/passwd
/etc/passwd中一行记录对应着一个用P每行用冒号隔开分ؓ(f)7个字D,具体字段说明如下Q?/span>
name:password:uid:gid:comment:home:shell
用户?口o(h):用户标识?l标识号:注释性描q?ȝ?dShell
home: 指定用户的主目录的绝对\?/span>
shell: 用户登陆后启动的一个进E,q个q程是用L(fng)录到pȝ后运行的命o(h)解释器或某个特定的程序,即Shell?/span>
例子Q?/span>
aurora:x:707:707::/home/aurora:/bin/bash
pȝ首先?x)查?/etc/passwd 文gQ看是否有aurora q个账号Q然后确定aurora的UIDQ通过UID 来确认用户和w䆾Q?/span>
如果存在则读?etc/shadow 影子文g中所对应的aurora的密码;
用户名:(x)xQuidQgidQ用户名全称Q用L(fng)Ӟ(x)用户所用的shellcd
x指向映射
uid? 则ؓ(f)root
2.aurora:$1$nC4FzXJz$OP5LS0Evj4uMsLvMHP1eZ/:15082:0:99999:7:::
etc/shadow文g?etc/passwd 的媄(jing)子文Ӟq个文gq不?etc/passwd 而生的Q这两个文g是应该是对应互补的;
shadow内容包括用户?qing)被加密的密码?qing)其他/etc/passwd 不能包括的信息?/span>
用户Q密码:(x)上次修改密码的时?Q两ơ修改口令间隔最的天数Q两ơ修改口令间隔最多的天数
3.aurora:x:707:
用户名:(x)用户l密码:(x)GID :用户列表
W四字段Q用户列表,每个用户之间?号分Ԍ本字D能为空Q?/span>
如果字段为空表示用户lؓ(f)GID的用户名
4.chown 修改文g和文件夹的用户和用户l属?/span>
5.passwd aurora 修改密码
]]>
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>
在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
[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
使用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)
|
Q责ȝ辑:(x)云子Q?
/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)
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>
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>
W一U方式NATQNATQ网l地址转换Q,你可以认Z的虚拟机是在你的L后方Q所有的联网h都先通过LQ其实是通过L的NAT服务器,q是VirtualBox内置的)(j)?/p>
配置步骤Q?/p>
W一步:(x)打开VirtualBox的设|窗?/p>
W二步:(x)q入|络讄界面QƈAttached To 选项选ؓ(f)NATQ点ȝ?/p>
W三步:(x)启动虚拟操作pȝQƈ在该pȝ中设|联|方式ؓ(f)DHCPQ?**重要Q,自动获得|络地址QVirtualBox?x)?0.0.0.0q样的地址q行联网。这样你的虚拟OS上网Q收发邮仉没有问题。但是无法和L|络中的其他PC通信哦?/p>
下面介绍Host Interface的方式进行连?/p>
先关闭你的虚拟操作系l^_^
W一步:(x)打开讄界面Q到|络选项卡下Qƈ选择Host Interfaceq接方式Q其他设|不需要改?/p>
W二步:(x)在网l选项卡下方的Host Interfaces中,新徏一个网l接口,点击x(chng)的绿色button。这样会(x)在你的主机的|络q接中增加一个VirtualBox Host Interface 1q样的一个本地连接?/p>
在主机的|络q接中,新徏的连接是默认断开的(当然咯,因ؓ(f)你的虚拟Lq没有启动嘛Q?/p>
W三步:(x)很重要的一步,我就是卡在这里好久时间才搞明白。VirtualBox需要设|一个网桥,而得所虚拟出来的网l接口可以通过你本机的|卡q行联网。怎么讄呢?
选中上图中的两个本地q接Q右键,选择桥接可以咯?/p>
W四步:(x)q入虚拟操作pȝQ修改联|方式ؓ(f)?rn)态IP的方式,q样O(jin)K?/p>
有时候需要在一?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 如果需要避开多个文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 |
修改 /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"
名称Qlocate
使用权限Q所有用?/p>
使用方式Q?/p>
locate [-q] [-d ] [--database=]
locate [-r ] [--regexp=]
locate [-qv] [-o ] [--output=]
locate [-e ] [-f ] <[-l ] [-c]
<[-U ] [-u]>
locate [-Vh] [--version] [--help]
说明Q?/p>
在一般的 distribution 之中Q数据库的徏立都被放?contab 中自动执行。一般用者在使用时只要用
# locate your_file_name的型式就可以?jin)?参数Q?/p>
-u
-U
建立数据库,-u ?x)由根目录开始,-U 则可以指定开始的位置?/p>
-e
?/p>
排除在寻扄范围之外?/p>
-l
-f
特定的档案pȝ排除在外Q例如我们没有到理要?proc 档案pȝ中的档案攑֜数据库中?/p>
-q
安静(rn)模式Q不?x)显CZQ何错误讯息?/p>
-n
臛_昄 个输出?/p>
-r
使用正规q算?做寻扄条g?/p>
-o
指定数据库存的名U?/p>
-d
指定数据库的路径
-h
昄辅助讯息
-v
昄更多的讯?/p>
-V
locate chdrv : L所有叫 chdrv 的档?/p>
locate -n 100 a.out : L所有叫 a.out 的档案,但最多只昄 100 ?/p>
locate -u : 建立数据?/p> locate命o(h)可以在搜L据库时快速找到档案,数据库由updatedbE序来更斎ͼupdatedb是由cron daemon周期性徏立的Qlocate命o(h)在搜L据库时比由整个由盘资料来搜寻资料来得快Q但较差劲的是locate所扑ֈ的档案若是最q才建立或刚更名的,可能?x)找不到Q在内定gQupdatedb每天?x)跑一ơ,可以׃改crontab来更新设定倹{?etc/crontab)
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>
locate指o(h)和find扑֯档案的功能类|但locate是透过updateE序硬盘(sh)的所有档案和目录资料先徏立一个烦(ch)引数据库Q在执行loacte时直接找该烦(ch)引,查询速度?x)较快,索引数据库一般是由操作系l管理,但也可以直接下达updatepȝ立即修改索引数据库?/p>
不过W一ơ在执行update後再使用locateL档案怼(x)p|Q此时就要执行slocate ˉu该命令(也可执行updatedb指o(h)Q其效果相同Q来更新slocate数据库,该命令会(x)?usr/sbin下生slocate执行档,再由locate到此数据库寻找所要找的资料?/p>
locateQ该命o(h)在运行时需要后台烦(ch)引的数据库作为支撑,?Ubuntu 中这个数据库文g位于 /var/cache/locate/locatedb。一般来_(d)q个数据库文件每天是通过 cron 自动更新的。如果不q没有得到更斎ͼ那么可以执行 sudo updatedb 来手动更新?/p>
假如我想要在pȝ中查找一个名?linux.html 的文Ӟ那么可以q样执行命o(h)Qlocate linux.html。locate 搜烦(ch)文g的速度很快Q一?x)儿׃?x)把结果列出来。locate 有一个十分有用的选项 -rQ它可以让你在搜索文件时使用正则表达式?/p>
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Ӟ一些常用的命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)
今天工作需要,其实是一行命令,
比如要将所有包含abc文g里面的abc替换为def
如果要把子目录的内容一h?/p>
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>
功能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 ?
在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
grep的工作方式是q样的,它在一个或多个文g中搜索字W串模板。如果模板包括空|则必被引用Q模板后的所有字W串被看作文件名。搜索的l果被送到屏幕Q不影响原文件内宏V?/p>
grep可用于shell脚本Q因为grep通过q回一个状态值来说明搜烦(ch)的状态,如果模板搜烦(ch)成功Q则q回0Q如果搜索不成功Q则q回1Q如果搜索的文g不存在,则返?。我们利用这些返回值就可进行一些自动化的文本处理工作?/p>
2. grep正则表达式元字符?基本?
^
锚定行的开?如:(x)'^grep'匚w所有以grep开头的行?/p>
$
锚定行的l束 如:(x)'grep$'匚w所有以grepl尾的行?/p>
匚w一个非换行W的字符 如:(x)'gr.p'匚wgr后接一个Q意字W,然后是p?/p>
*
匚w零个或多个先前字W?如:(x)'*grep'匚w所有一个或多个I格后紧跟grep的行?.*一L(fng)代表L字符?/p>
[]
匚w一个指定范围内的字W,?[Gg]rep'匚wGrep和grep?/p>
[^]
匚w一个不在指定范围内的字W,如:(x)'[^A-FH-Z]rep'匚w不包含A-R和T-Z的一个字母开_(d)紧跟rep的行?/p>
\(..\)
标记匚w字符Q如'\(love\)'Qlove被标Cؓ(f)1?/p>
\<
锚定单词的开始,?'\\>
锚定单词的结束,?grep\>'匚w包含以grepl尾的单词的行?/p>
x\{m\}
重复字符xQmơ,如:(x)'0\{5\}'匚w包含5个o的行?/p>
x\{m,\}
重复字符x,臛_mơ,如:(x)'o\{5,\}'匚w臛_?个o的行?/p>
x\{m,n\}
重复字符xQ至mơ,不多于nơ,如:(x)'o\{5,10\}'匚w5--10个o的行?/p>
\w
匚w文字和数字字W,也就是[A-Za-z0-9]Q如Q?G\w*p'匚w以G后跟零个或多个文字或数字字符Q然后是p?/p>
\W
\w的反|Ş式,匚w一个或多个非单词字W,如点号句L(fng)?/p>
\b
单词锁定W,? '\bgrepb\'只匹配grep?/p>
3. 用于egrep?grep -E的元字符扩展?/p>
+
匚w一个或多个先前的字W。如Q?[a-z]+able'Q匹配一个或多个写字母后跟able的串Q如loveable,enable,disable{?/p>
?
匚w零个或多个先前的字符。如Q?gr?p'匚wgr后跟一个或没有字符Q然后是p的行?/p>
a|b|c
匚wa或b或c。如Qgrep|sed匚wgrep或sed
()
分组W号Q如Qlove(able|rs)ov+匚wloveable或loversQ匹配一个或多个ov?/p>
x{m},x{m,},x{m,n}
作用同x\{m\},x\{m,\},x\{m,n\}
文章出处QDIY部落(http://www.diybl.com/course/3_program/shell/shelljs/20090216/155758.html)