-
hadoop单机版环境搭建
2010-03-30 23:58:47
项目中需要用到了hadoop,原有的hadoop环境因为其他原因,有些冲突。自己就重新搭建了一套。
也为了以后自己可以更方便的测试。
1、下载hadoop。这个在我之前的函数库中已经封装好了地址。直接hadoop_download 即可。hadoop_download ()
{
rsa `hostname -a`;
wget 'http://labs.xiaonei.com/apache-mirror/hadoop/core/hadoop-0.18.3/hadoop-0.18.3.tar.gz' 'http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/
USD/VerifyItem-Start/jdk-6u14-linux-x64.bin?BundledLineItemUUID=Ev1IBe.p.mYAAAEilUYHlhw5&OrderID=AvVIBe.p208AAAEigkYHlhw5&ProductID=tPxIBe.oz2IAAAEhmh0zLjfT&FileName=/jdk-6u14-l
inux-x64.bin';
tar zxvf hadoop-0.18.3.tar.gz;
cd hadoop-0.18.3;
[[ -z $JAVA_HOME ]] && print please set JAVA_HOME
}
2、设置单机版的配置。在conf/hadoop-site.xml中,添加如下的配置<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://localhost:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
在conf/hadoop-env.sh中,添加export JAVA_HOME=jdk的路径。
3、准备工作
把本机打通认证。就是让自己登陆自己不需要密码提示。使用函数库中的rsa 本机ip 即可。
格式化namenodebin/hadoop namenode –format
4、启动
bin/start-all.sh 即可。
不过一般,可能会遇到一些奇怪的错误。比如INFO hdfs.DFSClient: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File <filename> could only be replicated to 0 nodes, instead of 1
当初遇到这种情况的时候,着实郁闷了一番。google无果。有人提出了方法,但是也不对。
后来考虑了下,可能是本机有其他的hadoop环境也在运行,可能是公用的东西有冲突。一般是/tmp下的文件。
我直接删除了/tmp下的相关文件,修改了所有的端口。然后重新格式化namenode。
然后重新启动。
结果OK。解决这个问题,是本次最大的收获。。
4、多机版的配置
触类旁通吧,修改相关的配置文件即可。做测试的话,单机版就OK.不够的话,就需要再conf/slave里面多添加几列ip吧。
5、若干问题记录。
hadoop的slave文件,是个鸡肋。系统读取相关的资源,是从hadoop-default.xml与hadoop-site.xml中读取的。配置好这两个文件是关键。
master,与slave只不过是client端使用。
启动后可以通过web界面去访问相关的信息,查看是否正常工作。
访问50070即可。
-
linux下文件传输的简便方法
2009-11-13 00:29:51
作为linux下的工作人员,我今天不得不感到羞愧。
忙于工作,写报告,回复邮件,频繁点击鼠标,把手指点肿了。
今天要和北京的同事传送一些文件,我可以ping通他们的服务器,但是却无法登陆,因为ssh受限了。
我不好意思让他sudo去搞系统的一些东西,就开始想各种办法尝试下。
第一次尝试,让他使用apache,搭建web服务,结果他们机器上没有apache
本来计划写个自动下载,安装,运行apache的脚本,不过去官方网站,竟然下载失败。真是晕了。
一想太麻烦就放弃了。
第二次尝试,让他执行 python -m CGIHTTPServer
这个命令调用python去开启http服务,很简单实用。
结果他的机器python 版本太落后,没有 CGIHTTPServer 模块。
然后疯狂思考,是否perl也可以一句话搭建web服务,转身问身后的同事,也不清楚。放弃。
搜索了下,也没有太多mini型的服务器,或者自带的命令。
rsync,nfs也想了下,太麻烦,放弃了。
尝试了其他的用python编写的脚本,貌似在低版本上也不能运行。
第三次尝试,nc -l -v -p 8000 < 数据文件
我在本地通过wget去访问,成功。
而且这种方式出奇的快,比scp要快很多。
不错的几次尝试,传输文件其实不用那么麻烦的,不一定非要知道对方的帐号与密码。
-
迅雷今天发生了更新失误
2009-08-02 18:06:02
-
Bash构造测试用数据
2009-07-22 23:24:16
最近要进行灰盒测试。测试一个hash函数。为了方便遍历大多数的数据分支,就写了一个bash 函数用于生成数据。
后来发现很有用,就共享出来,希望对大家有帮助。
x=' ( a b c d e f g h i x y z , ! @ $ % ^ & ( ) _ _ + | < > ? ) : " { } [ ]' #构造随机的字符串的每个字符的范围
for((i=0;i<1000;i++));do data_bylen $i $x;done > data #写入1000个字符串到数据文件。
while read line ;do ../../bin/SHash $line|| print $line;done < *data #调用程序去处理。
不过数据case不全,我只是举个例子而已。用来生成数据还是蛮有用的。
两种用法
data_bylen 10 a 生成10个a
data_bylen 10 a b c 生成 10 个由 a b c随机字母组成的字符串。
未来几天,打算精心构造一批生成数据的bash函数,来方便测试。以前手工测试时候总结的数据类型,终于可以派上用场了。数据生成的技术含量也不少,攻关下。
[huangysh@qa16 SHash]$ qahelp data_bylen
=========================
:<<data_bylen_help
data_bylen size meta_string
data_bylen size meta_string_list
data_bylen 10 a
data_bylen 10 a b c
data_bylen_help
=========================
========source code=========
data_bylen is a function
data_bylen ()
{
unset meta_string;
meta_string=(${*:2});
local size=$1;
local i;
for ((i=1 ; i<=size ; i++))
do
random_num=$((RANDOM%($#-1)));
printf "%s" ${meta_string[*]:$random_num:1};
done;
echo
}
============================
-
bash登陆旺旺尝试(二)
2009-07-17 22:30:10
犯了个错误,我低估了阿里旺旺网页版的登录过程。
发现中间的登录过程和cookie传输有不少的暗桩。
重新翻看了curl的官方帮助,检查下一遍,确认自己没有用过。因为我发现网上很多人写的curl教程,都不是太正确。个别的参数理解错误了,比如-D -b -c -F -H等涉及cookie的参数。
因为之前我精简了部分的登录过程,导致了cookie的值不正确,而且发到网页版的服务器时,压根没有把cookie加上。使用-b 把从firefox中获得的cookie搞上,就没有问题。看来是cookie处理的过程,我漏掉了部分细节。
使用commview去抓包。得到了发消息的全过程。暂时没有发现cookie的诀窍。
打算使用curl一步步的模拟,把所有的过程都弄上。看看能不能得到最终的cookie。
又搞了2个小时,无果。
最郁闷的是,淘宝限制了登陆次数的常数,搞得我试验了几次后,就被封ip了。
不过curl倒是各个功能都尝试了一遍。算是有些收获吧。有时间再弄。
下一步要解决的问题。
1、cookie的生成与传输过程揭秘。
2、绕过验证码发送消息。希望旺旺在这方面有漏洞可钻。
摘录一个数据。纪念下。
..POST /wangwang/webwwtb HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Referer: http://webwwtb.im.alisoft.com/wangwang/webww.htm?
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: webwwtb.im.alisoft.com
Content-Length: 157
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: _nk_=jdAj1Llo632cxxpnzH1TFMI=; CHECKCODEcnalichnhuangseven=e82820ef17065bb6ac9ae9d511af31331247835695553; pmt0=4hiYirj/b8J4Jh8Ely2wQZ33+1YQTkxx346srLHmAIsx+Fjzgb2IlJebwvJL45xjbp3KYUD4+yFHq+F/whAKofg5oUWmyKVC1qw9vBINOJCP5vWwjyX75vApADIGqESv+lmfAJKIDLz6Gza0QnkrfzaSaRa2wtcXA7eI6F8klsV/0VyzQkwh4+I2rPVtQjhdIIIz3El8nhSU9BRKbjkOiN06VdLmHTML3CTdV+8Z6OjIo3b0KbHD2TkmiSlOP+07/dQXA5E0uQTmVwyKZO27eEQCs4p8gfIFm5+DDOMFqTT4c1MXZ47P7w==; cnalichnhuangseven_chatcard=; cntaobaosihanjishu_chatcard=; __last_login_ver__=; cnalichnhuangseven=chs; cntaobaobst_seven=chs; cntaobaobst_seven_chatcard=; JSESSIONID=XycjaKLKIPhdBUmy; tmp0=Ob4fcTZqYWqQ+7aOyNUdFtR0TnLmXcEjEAGGE3owBt/qZifBrdNyWnVGYA1pVxuG6lxNCdnhSdbVCy7/3k1xlk7JGn+bDhW3Dtf5W+HJJPcsc1n0JLQoLFSia6djwSxz8W9FwYD9/mfhiCKAJuLoc0HrvD5AMFs+2uywV73cfLRGbxWpFpqjGsF815bRkwOat4h3iuLP8jTO456BaKrXxSqeOcZrs7tBZ0z0OR9JurutNZValPHHJJd2tALmeH9KcEFGVZMtPzRG2+nzACWEodzCw7LWMYkiG3gEGSDwKarcLQG868is5HgoZw8R3yAQ7Uejuc5ZdzZiJ9i9HELgrCt8gxten9rs9gdB/xCk7Kpd3MyvZMYlzSmQeph9K2//8NMp+vCn2IfVBCL5auR8zi7uTyswUY64QFQ7EYiwbS3etYI84Wt72xkhc5GrfgKTYXT2heCeFJwWjr6iNj5M2x6BrhZMmuXJ+3b5Pm7WDSYc0Cy3MHbFT8txDws8IFa+PgxiG81Ew9qwQyf45jDECA==; __last_login_ww__=cnalichnhuangseven; ystat_bc_648568=3947965907669682758; lastUrl25939996cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D25939996%26imAppId%3D19437%26appInstanceId%3D; lastApp25939996cnalichnhuangseven=19437; lastUrl29130588cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D29130588%26imAppId%3D19437%26appInstanceId%3DTRIBF3DAB36A64255961B686280780515DBE; lastApp29130588cnalichnhuangseven=19437; lastUrl10435618cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D10435618%26imAppId%3D19437%26appInstanceId%3D; lastApp10435618cnalichnhuangseven=19437; lastUrl498010cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D498010%26imAppId%3D19437%26appInstanceId%3D; lastApp498010cnalichnhuangseven=19437; lastUrl52198947cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D52198947%26imAppId%3D19450%26appInstanceId%3D; lastApp52198947cnalichnhuangseven=19450; lastUrl32213393cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D32213393%26imAppId%3D19450%26appInstanceId%3D; lastApp32213393cnalichnhuangseven=19450; lastUrl26596140cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D26596140%26imAppId%3D19437%26appInstanceId%3D; lastApp26596140cnalichnhuangseven=19437; lastUrl93347296cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D93347296%26imAppId%3D19450%26appInstanceId%3DTRIB5A31A85045F86C6DD010629BB594FEF9; lastApp93347296cnalichnhuangseven=19450; lastUrl34066799cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D34066799%26imAppId%3D19437%26appInstanceId%3DTRIBA4FC65C191F7BB122183A980AB8D9E8C; lastApp34066799cnalichnhuangseven=19437; lastUrl29980269cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D29980269%26imAppId%3D19437%26appInstanceId%3D; lastApp29980269cnalichnhuangseven=19437; lastUrl2513149cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D2513149%26imAppId%3D19437%26appInstanceId%3D; lastApp2513149cnalichnhuangseven=19437; lastUrl7754668cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D7754668%26imAppId%3D19437%26appInstanceId%3DTRIB6FC620DC9CF8C76360DE1CCD9B2362F7; lastApp7754668cnalichnhuangseven=19437; lastUrl14117160cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D14117160%26imAppId%3D19437%26appInstanceId%3D; lastApp14117160cnalichnhuangseven=19437; lastUrl106973556cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D106973556%26imAppId%3D19437%26appInstanceId%3D; lastApp106973556cnalichnhuangseven=19437; lastUrl35837690cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D35837690%26imAppId%3D19450%26appInstanceId%3D; lastApp35837690cnalichnhuangseven=19450; lastUrl58870050cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D58870050%26imAppId%3D19450%26appInstanceId%3D; lastApp58870050cnalichnhuangseven=19450; lastUrl104689323cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D104689323%26imAppId%3D19450%26appInstanceId%3D; lastApp104689323cnalichnhuangseven=19450; lastUrl9568809cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D9568809%26imAppId%3D19450%26appInstanceId%3D; lastApp9568809cnalichnhuangseven=19450; lstat_bc_1167722=11498438611695084407; lastUrl31819614cnalichnhuangseven=http%3A//mall.alisoft.com/apps/mysoft/ImTab%21imTribeSoft.jspa%3FimTribeId%3D31819614%26imAppId%3D19450%26appInstanceId%3D; lastApp31819614cnalichnhuangseven=19450; ali_apache_id=121.0.29.226.1247210949454.6; wwka=1247835684812; JSESSIONID=43D68A49E4900A4A1B7792288AECFECD
act=doSendMsg&msgId=1247835685968&msg=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&toUid=cnalichnhuangseven&kp=1247835685968HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.0.3SP1 (build: CVSTag=JBoss_4_0_3_SP1 date=200510231054)/Tomcat-5.5
Cache-Control: no-cache
Set-Cookie: wwka=1247835685968; Path=/
Set-Cookie: CHECKCODEcnalichnhuangseven=512277c03d37a1266d07f7cbe975c9601247835700494
Content-Type: text/html;charset=UTF-8
Content-Length: 133
Date: Fri, 17 Jul 2009 13:01:39 GMT
OK.1247835685968.cnalichnhuangseven.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.2009-07-17 21:01:40
-
bash登陆旺旺尝试(一)
2009-07-17 01:57:37
想写个脚本,可以通过旺旺来发送消息给特定的用户。
因为旺旺有网页版,所以这是首选网页版。
使用curl去登陆尝试,不过发现curl貌似没有把cookie加到后面的请求中。
而且发现旺旺网页版的cookie是一直变动的。消息的id也是变动的。
折腾了很久,就是没有发送成功。
后来使用大鲨鱼去监控阿里旺旺软件的tcpsocket通信信息,结果发现也是挺繁琐的。就还是放弃了。重新回到网页版上。
研究了2个小时,啥也没有成功,郁闷,有机会再搞。
发现了旺旺上线的一个关键数据包。
http://webwwtb.im.alisoft.com/wangwang/webwwtb
POST /wangwang/webwwtb HTTP/1.1
Host: webwwtb.im.alisoft.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://webwwtb.im.alisoft.com/wangwang/webww.htm?
Content-Length: 34
Cookie: ali_apache_id=121.0.29.225.81881387989548.0; __last_login_ver__=; pmt0=YyBjVg985K5R8PDsXx05O5paYQYVWV4OrzmPbFzZqbjSp0/4JSPXZYcJcjjmfMzsGlDl5TtLtXbqTL4NRpBDV7YsyRySV0286tqpwuJUerm3qVzV/Whrju4Bs2sXD3W2Rf0MESlIFFrqe9jEbUIN5aP4PK0Go7xKJDmLvKN4TENBH49D0sOcGmooi4B7USzlOXb3AxpJ/oJtYn9YgNJFXS0vccM6AFVO5o/oI3xKF++wlxqowNGVlQMH74vwpTVa6qsUY3rexnyFPid+gtXe/9W+XVRdE1c6i2snVAiL4lPDY2QfN9tamQ==; wwka=1; JSESSIONID=D1460AD3356C09F885EF8680A635BC48; JSESSIONID=r5bTs1DkoY+pD7JT; tmp0=tWsPnX2H3JjJ8uXv6vdgbxrHOc8/UF+1Eg+iYr+O5jJgw/Sw/5UqwlJ+lIUHAIqMiVCQPceNsinlQxJeNXA2XyO1piezoUuLjIq91oYSlV/vfFC9oxQmtQ3gBwhS7uu50xkY8bMjdrYEg+Esv560i7VkuZsG0RUUs8qKDodCfYDufO+neuRRne86GEbB2PeiSpDt5cJ8qr+3eedq8xFWsUaexT8g6UWROFEpEt2oStBJicTuzUet/5cnL2HbNlXx9T7FhJsjJqi0uIqFSMJf+mGqogdxO/8OmQxLjwCrFU5lL4VjmUkvjl4soCXYyP6qwVDRQbOKaoXe1O9fJeI6ewpTsYbFFRRLoWC8SYuw0J4cCuvIe5fIsaE5zGIBz3xFgv9po1+j2DvR7ySJ/poZB86vVO+olVgjGiBMi4NYyNKuF8AaVFHoMcYW4TrWb4grcyYx6EOplJfqfpjGRpkUiAV3OQKUbd/olpum9kI0eTOKOZrF+aGy3eLSJLU7m1FZiYSwYzxDAsIwWhkj3CyMzg==
Pragma: no-cache
Cache-Control: no-cache
act=doCheckStatus&kp=1247765958929
HTTP/1.x 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.0.3SP1 (build: CVSTag=JBoss_4_0_3_SP1 date=200510231054)/Tomcat-5.5
Cache-Control: no-cache
Set-Cookie: wwka=1247765958929; Path=/
Content-Type: text/html;charset=UTF-8
Content-Length: 24
Date: Thu, 16 Jul 2009 17:39:33 GMT
登陆网页版旺旺的函数代码如下。cookie没有处理好,下一步要 试验curl的cookie功能了。
wangwang()
{
curl -v -c /tmp/ww.txt -d 'TPL_username=xxxxx&TPL_password=xxxxxxx&Submit=%B5%C7+%C2%BC&actionForStable=post_user_action&action=Authenticator&TPL_redirect_url=&_oooo_=&event_submit_do_login=anything&abtest=&pstrong=1&from=&yparam=&done=' 'http://member1.taobao.com/member/login.jhtml'
curl -v -b /tmp/ww.txt -c /tmp/ww.txt 'http://webwwtb.im.alisoft.com/wangwang/webww.htm'
curl -v -b /tmp/ww.txt -c /tmp/ww.txt -d 'act=doCheckStatus&kp='`date +%s`000 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
curl -v -b /tmp/ww.txt -c /tmp/ww.txt -d 'act=doGetActiveDegree' 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
curl -v -b /tmp/ww.txt -c /tmp/ww.txt -d 'act=doGetActiveDegree' 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
curl -v -b /tmp/ww.txt -c /tmp/ww.txt -d 'act=doGetActiveDegree' 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
curl -v -b /tmp/ww.txt -c /tmp/ww.txt -d 'act=doCheckStatus&kp='`date +%s`000 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
while :
do
read -t 1 && break
#curl -v -b /tmp/ww.txt -d 'act=doCheckStatus&kp='`date +%s`000 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
curl -v -b /tmp/ww.txt -c /tmp/ww.txt -d 'act=doKeepAlive&kp='`date +%s`000 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
curl -v -b /tmp/ww.txt -c /tmp/ww.txt -d 'act=doGetActiveDegree' 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
curl -v -b /tmp/ww.txt -c /tmp/ww.txt -d 'act=doGetActiveDegree' 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
done
curl -v -b /tmp/ww.txt -d 'act=doSendMsg&msgId=1247756217652&msg=ffffffffffffffffffffffffffffffffffffffffffff&toUid=cnalichnhuangseven&kp=1247756217653' 'http://webwwtb.im.alisoft.com/wangwang/webwwtb'
}
-
黑客帝国中使用linux的片段
2009-07-05 18:38:20
-
Linux下共享screen进行协作
2009-06-30 20:23:43
平时工作,同事之间,难免会遇到一些问题,进行求助。
如果碰巧工作地点不在一地,那么就非常的不便。
尤其是新手,根本无法把问题描述清楚,让buddy比较郁闷。
另外,工作中,也的确有需要一起配合工作,比如实现同步的教学之类的。
为了解决这个平时的工作小问题。我总结了以下两个方法。
1、使用screen。
screen是个管理员非常重要的工具,它可以让保存session,保留程序的执行环境,非常的方便。
screen是可以进行多用户连接的。不过方法比较麻烦。可以参考下
http://bypassinternetfilters.com/index.php?hl=f5&q=uggc%3A%2F%2Frxnfuvqn.jbeqcerff.pbz%2F2006%2F11%2F06%2Ffperra-zhygvhfre%2F
问题是整个网上都这样说,开始我愣是没有试验通过。真是奇怪。后来无意发现,screen是个连接,指向了另一个文件,必须使用二进制程序去执行才能具备suid,连接是不具备的,
同时也因为操作有点麻烦那,不方便使用。
可以使用的就是两个人用同一个帐号登陆,这样就不好了。改进方法研究中。
总体的命令就是
sudo chmod +s /usr/bin/screen
multiuser on
acladd huangysh
貌似也不多,但是想让别人去用,不过推广起来还是挺周折的。很多同事是懒得去研究。
看到很多人把screen的用法写的很随便,转帖下官方的说明吧。不过好像没有远程连接的功能,我是没有找到。
screen [ -options ] [ cmd [ args ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]
2、使用kibitz
kibitz是expect工具包的一部分,没有的话,就需要从网上下载并编译了。
用法比较简单,在本机通过用户就可以简单呼叫别人。
比如kibitz huangysh
那么huangysh帐号登陆的话,就会在console上收到一个广播消息。告诉你如何去连接,一般是执行一个命令,比如
Can we talk? Run: kibitz -31317
你只需要执行kibitz -31317 就可以连接上。
蛮方便的。
我想肯定也有其他的方法的。不过目前对终端,tty,pts等概念不是太熟悉。还不知道如何去充分的利用他们。
-
终于成为教授了
2009-06-07 00:38:55
准备了很久,终于决定要加入公司的“教授”队伍了。
其实自己很菜,但是我想毕竟自己也有自己的所学。
已经通过了。下一步就要开始行动了。
行动了还不够,还要有表现,需要别人的认可才可以。
下步的计划
1、买权威的shell书,对自己的知识查缺补漏。看看shell高级编程。
2、学linux,增强全面性和深度。(看已买的基本linux图书,深入进去)
3、准备课件
bash基础
编码与解码浅析
bash之全新函数式编程与qa函数库
最新修改为
bash基础与qa函数库
专注在这一个方面上。
-
curl作用详谈
2009-05-20 11:27:09
这是curl的官方地址。里面描述是最详细的。如果你知道的内容不够多的话,可以继续在里面探索。
非常棒的一个工具。
http://curl.haxx.se/docs/manpage.html 众多的命令参数
http://curl.haxx.se/docs/httpscripting.html 众多的浏览器模拟方法
同时,转一份前人编写的使用心得吧,写的还是挺全的。
这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑
1)
二话不说,先从这里开始吧!curl http://www.yahoo.com
回车之后,www.yahoo.com 的html就稀里哗啦地显示在屏幕上了~~~~~
2)
嗯,要想把读过来页面存下来,是不是要这样呢?
curl http://www.yahoo.com > page.html当然可以,但不用这么麻烦的!
用curl的内置option就好,存下http的结果,用这个option: -o
curl -o page.html http://www.yahoo.com这样,你就可以看到屏幕上出现一个下载页面进度指示。等进展到100%,自然就OK咯
3)
什么什么?!访问不到?肯定是你的proxy没有设定了。
使用curl的时候,用这个option可以指定http访问所使用的proxy服务器及其端口: -x
curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com4)
访问有些网站的时候比较讨厌,他使用cookie来记录session信息。
像IE/NN这样的浏览器,当然可以轻易处理cookie信息,但我们的curl呢?.....
我们来学习这个option: -D <-- 这个是把http的response里面的cookie信息存到一个特别的文件中去
curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com这样,当页面被存到page.html的同时,cookie信息也被存到了cookie0001.txt里面了
5)
那么,下一次访问的时候,如何继续使用上次留下的cookie信息呢?要知道,很多网站都是靠监视你的cookie信息,
来判断你是不是不按规矩访问他们的网站的。
这次我们使用这个option来把上次的cookie信息追加到http request里面去: -b
curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.yahoo.com这样,我们就可以几乎模拟所有的IE操作,去访问网页了!
6)
稍微等等~~~~~我好像忘记什么了~~~~~
对了!是浏览器信息~~~~有些讨厌的网站总要我们使用某些特定的浏览器去访问他们,有时候更过分的是,还要使用某些特定的版本~~~~
NND,哪里有时间为了它去找这些怪异的浏览器呢!?好在curl给我们提供了一个有用的option,可以让我们随意指定自己这次访问所宣称的自己的浏览器信息: -A
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com这样,服务器端接到访问的要求,会认为你是一个运行在Windows 2000上的IE6.0,嘿嘿嘿,其实也许你用的是苹果机呢!
而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"则可以告诉对方你是一台PC上跑着的Linux,用的是Netscape 4.73,呵呵呵
7)
另外一个服务器端常用的限制方法,就是检查http访问的referer。比如你先访问首页,再访问里面所指定的下载页,这第二次访问 的referer地址就是第一次访问成功后的页面地址。这样,服务器端只要发现对下载页面某次访问的referer地址不是首页的地址,就可以断定那是个 盗连了~~~~~讨厌讨厌~~~我就是要盗连~~~~~!!
幸好curl给我们提供了设定referer的option: -e
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -e "mail.yahoo.com" -o page.html -D cookie0001.txt http://www.yahoo.com这样,就可以骗对方的服务器,你是从mail.yahoo.com点击某个链接过来的了,呵呵呵
8)
写着写着发现漏掉什么重要的东西了!----- 利用curl 下载文件刚才讲过了,下载页面到一个文件里,可以使用 -o ,下载文件也是一样。
比如, curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
这里教大家一个新的option: -O
大写的O,这么用: curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
这样,就可以按照服务器上的文件名,自动存在本地了!再来一个更好用的。
如果screen1.JPG以外还有screen2.JPG、screen3.JPG、....、screen10.JPG需要下载,难不成还要让我们写一个script来完成这些操作?
不干!
在curl里面,这么写就可以了:
curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG呵呵呵,厉害吧?!~~~
9)
再来,我们继续讲解下载!
curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG这样产生的下载,就是
~zzh/001.JPG
~zzh/002.JPG
...
~zzh/201.JPG
~nick/001.JPG
~nick/002.JPG
...
~nick/201.JPG够方便的了吧?哈哈哈
咦?高兴得太早了。
由于zzh/nick下的文件名都是001,002...,201,下载下来的文件重名,后面的把前面的文件都给覆盖掉了~~~没关系,我们还有更狠的!
curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG--这是.....自定义文件名的下载?
--对头,呵呵!#1是变量,指的是{zzh,nick}这部分,第一次取值zzh,第二次取值nick
#2代表的变量,则是第二段可变部分---[001-201],取值从001逐一加到201
这样,自定义出来下载下来的文件名,就变成了这样:
原来: ~zzh/001.JPG ---> 下载后: 001-zzh.JPG
原来: ~nick/001.JPG ---> 下载后: 001-nick.JPG这样一来,就不怕文件重名啦,呵呵
9)
继续讲下载
我们平时在windows平台上,flashget这样的工具可以帮我们分块并行下载,还可以断线续传。
curl在这些方面也不输给谁,嘿嘿比如我们下载screen1.JPG中,突然掉线了,我们就可以这样开始续传
curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG当然,你不要拿个flashget下载了一半的文件来糊弄我~~~~别的下载软件的半截文件可不一定能用哦~~~
分块下载,我们使用这个option就可以了: -r
举例说明
比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 要下载(赵老师的电话朗诵 )
我们就可以用这样的命令:
curl -r 0-10240 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
curl -r 10241-20480 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
curl -r 20481-40960 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
curl -r 40961- -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3这样就可以分块下载啦。
不过你需要自己把这些破碎的文件合并起来
如果你用UNIX或苹果,用 cat zhao.part* > zhao.mp3就可以
如果用的是Windows,用copy /b 来解决吧,呵呵上面讲的都是http协议的下载,其实ftp也一样可以用。
用法嘛,
curl -u name:passwd ftp://ip:port/path/file
或者大家熟悉的
curl ftp://name:passwd@ip:port/path/file10)
说完了下载,接下来自然该讲上传咯
上传的option是 -T比如我们向ftp传一个文件: curl -T localfile -u name:passwd ftp://upload_site:port/path/
当然,向http服务器上传文件也可以
比如 curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi
注意,这时候,使用的协议是HTTP的PUT method刚才说到PUT,嘿嘿,自然让老服想起来了其他几种methos还没讲呢!
GET和POST都不能忘哦。http提交一个表单,比较常用的是POST模式和GET模式
GET模式什么option都不用,只需要把变量写在url里面就可以了
比如:
curl http://www.yahoo.com/login.cgi?user=nickwolfe&password=12345而POST模式的option则是 -d
比如,curl -d "user=nickwolfe&password=12345" http://www.yahoo.com/login.cgi
就相当于向这个站点发出一次登陆申请~~~~~到底该用GET模式还是POST模式,要看对面服务器的程序设定。
一点需要注意的是,POST模式下的文件上的文件上传,比如
<form. method="POST" enctype="multipar/form-data" action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi">
<input type=file name=upload>
<input type=submit name=nick value="go">
</form>
这样一个HTTP表单,我们要用curl进行模拟,就该是这样的语法:
curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi罗罗嗦嗦讲了这么多,其实curl还有很多很多技巧和用法
比如 https的时候使用本地证书,就可以这样
curl -E localcert.pem https://remote_server再比如,你还可以用curl通过dict协议去查字典~~~~~
curl dict://dict.org/d:computer今天就先讲到这里吧,呵呵。疯狂的curl功能,需要你---一起来发掘。
copyright by nickwolfe@CCF
2004.08.24 21:24应朋友之邀所作--初稿
-
Linux下实现bash并发
2009-04-01 10:08:22
自己写的命令,还无法进行并发执行。shell的一个缺点。没有并发的概念。只能通过后台进程去实现了。最后终于解决。
粗糙简单的代码
gexecbg()
{
jid_old=`jobs -p|tail -n 1`
for i in ${*:1:$#-1};
do
[[ $i > = ]]&&host=$i.asc.cnz.alimama.com||host=119.42.239.$i
ssh $host ${*:$#} &
done
jid_new=`jobs -p`
wait ${jid_new#*`echo $jid_old`} 2>/dev/null||:
}
用法: gexecbg 31 32 33 'hostname'
就会在指定的ip上,运行上述命令。而且是并发的。一些分析大量日志的操作,可以使用此函数。
另一篇比较好的参考文章:http://www.cnitblog.com/sysop/archive/2008/11/03/50974.aspx
附上关于linux的jobs的细节。(转)
下列命令可以用来操纵进程任务:
T"^9tMQ?7b#mE ps 列出系统中正在运行的进程;
%gNPr ` kill 发送信号给一个或多个进程(经常用来杀死一个进程);
d| O/E9h.}[} jobs 列出当前shell环境中已启动的任务状态,若未指定jobsid,则显示所有活动的任务状态信息;如果报告了一个任务的终止(即任务的状态被标记为Terminated),shell 从当前的shell环境已知的列表中删除任务的进程标识;3V$MlE$m
bg 将进程搬到后台运行(Background);
D DB OAk6o fg 将进程搬到前台运行(Foreground);
(Z8Y(_9m-FV8cwzFL.f
*Io:SB(d 将job转移到后台运行 q0uc9rq)Q9`?"O
如果你经常在X图形下工作,你可能有这样的经历:通过终端命令运行一个GUI程序,GUI界面出来了,但是你的终端还停留在原地,你不能在shell中继续执行其他命令了,除非将GUI程序关掉。
hN#~+wa${W
&`};b9@-b9W 为了使程序执行后终端还能继续接受命令,你可以将进程移到后台运行,使用如下命令运行程序: #假设要运行xmmsK-^\qXXDK
K K7^Od;aY_v6} $xmms &
b"f"@.}5X5|Is y }-A0U*u7S?L
这样打开xmms后,终端的提示又回来了。现在xmms在后台运行着呢;但万一你运行程序时忘记使用“&”了,又不想重新执行;你可以先使用ctrl+z挂起程序,然后敲入bg命令,这样程序就在后台继续运行了。
X%x!@ R7^v@ x
;P}BHn/xS/{5d)Kc 概念:当前任务
4@#zJ/d(~eGn2T
siN4]y 如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码 “[2]”的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均 是当前任务。
8K3Q2Z~vO e`"t
s1q,@ vS7P9`+eHC"| 察看jobs zur2GSr
使用jobs或ps命令可以察看正在执行的jobs。
"rCQ5G)rr ?,S sq1gfkW]
jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;
i$q~rb4hK5D s.[k m;TQX2v
进程的挂起 "u"G2A-W3qRZ7l/VJ'X
{ {\G:E$h1V~n,J 后台进程的挂起:
^(MXS|u-}YJz 9P DlE3pR
在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;LQS{E1}
|!`+H.}%W9y
在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;;cIfB7l$K0GY"P
)ki(_cM 当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;
7Ka@'ri$d E
$ti!\#u9i6j/k"j 前台进程的挂起:y6b`4BrABs
D4g%u1~$_0d&sJY ctrl+Z;
sE+K'Ah1{/Q+H/Z`8y}
FJ,E.~U/N i 进程的终止 l|?m\}
;o6xr i_+Ue F
后台进程的终止:
'Y:T5M9ZP|1e 方法一:
(V(yiO5`T@6_ 通过jobs命令查看job号(假设为num),然后执行kill %numZ8`l~B
yf(N%g{,lgn u 方法二:SwQ,D6}h1nr8G
通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid :d]Bt7vO
rt9a.mPW"FA
前台进程的终止:!MX`w}
#b'p$JBv9I$J{w ctrl+c
r7\yXf Ws)c6K}/T
q@{5["M"g#f(O |,G kill的其他作用
9CFa"rC3_Z kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。 7Iv"z&KA:f'K
EWC:Vsm;rvi:y.XV+q SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。 -
csv导入mysql
2009-03-27 23:01:17
同事让我把两份csv文件中的数据连接起来,就是把一个csv文件中的id换成另一个csv文件中的对应的字符串。
excel不熟,数量也不小。放弃手工的可能性了。
可惜我不会excel,不知道是否有这种功能。
初步设想是使用shell编程实现,但是里面含有大量的汉字,转换的时候,容易出现乱码的情况。
后来想一下,发现这种要求很像sql的连接查询。
如果能够转换成数据库,然后再连接查询出来,岂不更好。就不用谢一堆代码了。
研究了一阵子,发现了 MySQL-Front 可以很方便的输入输出数据表为xls等其他文件格式。非常的方便。
导入进去了。然后使用连接查询得出结果。然后把结果再导出问excel文件即可。
或者使用access,利用access的导入功能,把xls导入为表,然后连接查询,把结果粘贴进excel即可。
任务顺利完成,庆幸自己幸好没有使用shell完成,会点sql还是挺有帮助的。
有的时候需要转换下思路,这样更好。
附上sql的语句。
SELECT *
FROM data
left JOIN ff
ON ff.id=data.fid
-
Linux性能监控命令
2009-03-23 15:22:00
vmstat
iostat
top
ps
sar
nmon
sysstat工具包
http://pagesperso-orange.fr/sebastien.godard/download.html
最近想利用系统中的一些基本命令,以脚本的形式,自动分析系统的状况。
可以监控到全系统。也可以监控到进程级别。
一些基本的指标
cpu_busy,cpu_idle,cpu_iowait,mem_user,memcache,load_one
-
Sar用法(转)
2009-03-23 15:17:42
最近在找进程级别的监控工具。发现了这篇文章,还是不错的。收录下。sar的功能其实已经涵盖了vmstat,iostat。
linux 和unix下SAR命令的用法,对机器性能检测很有帮助dmesg可以直接查看cpu的主频,要查看CPU、内存的使用情况可以使用sar!
sar 命令行的常用格式: sar [options] [-A] [-o file] t [n]
在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有 的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式 存放在文件中,file 在此处不是关键字,是文件名。options 为命令行选项,sar命令 的选项很多,下面只列出常用选项:
-A:所有报告的总和。 -u:CPU利用率 -v:进程、I节点、文件和锁表状态。 -d:硬盘使用报告。 -r:没有使用的内存页面和硬盘块。 -g:串口I/O的情况。 -b:缓冲区使用情况。 -a:文件读写情况。 -c:系统调用情况。 -R:进程的活动情况。 -y:终端设备活动情况。 -w:系统交换活动。
下面将举例说明。
例一:使用命令行 sar -u t n
例如,每60秒采样一次,连续采样5次,观察CPU 的使用情况,并将采样结果以二进制 形式存入当前目录下的文件zhou中,需键入如下命令:
# sar -u -o zhou 60 5
屏幕显示:
SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001 14:43:50 %usr %sys %wio %idle(-u) 14:44:50 0 1 4 94 14:45:50 0 2 4 93 14:46:50 0 2 2 96 14:47:50 0 2 5 93 14:48:50 0 2 2 96 Average 0 2 4 94
在显示内容包括:
%usr:CPU处在用户模式下的时间百分比。 %sys:CPU处在系统模式下的时间百分比。 %wio:CPU等待输入输出完成时间的百分比。 %idle:CPU空闲时间百分比。
在所有的显示中,我们应主要注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈, %idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存, 此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表 明系统中最需要解决的资源是CPU。
如果要查看二进制文件zhou中的内容,则需键入如下sar命令:
# sar -u -f zhou
可见,sar命令即可以实时采样,又可以对以往的采样结果进行查询。
例二:使用命行sar -v t n
例如,每30秒采样一次,连续采样5次,观察核心表的状态,需键入如下命令:
# sar -v 30 5
屏幕显示: SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001 10:33:23 proc-sz ov inod-sz ov file-sz ov lock-sz (-v) 10:33:53 305/ 321 0 1337/2764 0 1561/1706 0 40/ 128 10:34:23 308/ 321 0 1340/2764 0 1587/1706 0 37/ 128 10:34:53 305/ 321 0 1332/2764 0 1565/1706 0 36/ 128 10:35:23 308/ 321 0 1338/2764 0 1592/1706 0 37/ 128 10:35:53 308/ 321 0 1335/2764 0 1591/1706 0 37/ 128
显示内容包括:
proc-sz:目前核心中正在使用或分配的进程表的表项数,由核心参数MAX-PROC控制。
inod-sz:目前核心中正在使用或分配的i节点表的表项数,由核心参数 MAX-INODE控制。
file-sz: 目前核心中正在使用或分配的文件表的表项数,由核心参数MAX-FILE控 制。
ov:溢出出现的次数。
Lock-sz:目前核心中正在使用或分配的记录加锁的表项数,由核心参数MAX-FLCKRE 控制。
显示格式为
实际使用表项/可以使用的表项数
显示内容表示,核心使用完全正常,三个表没有出现溢出现象,核心参数不需调整,如 果出现溢出时,要调整相应的核心参数,将对应的表项数加大。
例三:使用命行sar -d t n
例如,每30秒采样一次,连续采样5次,报告设备使用情况,需键入如下命令:
# sar -d 30 5
屏幕显示:
SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001 11:06:43 device %busy avque r+w/s blks/s avwait avserv (-d) 11:07:13 wd-0 1.47 2.75 4.67 14.73 5.50 3.14 11:07:43 wd-0 0.43 18.77 3.07 8.66 25.11 1.41 11:08:13 wd-0 0.77 2.78 2.77 7.26 4.94 2.77 11:08:43 wd-0 1.10 11.18 4.10 11.26 27.32 2.68 11:09:13 wd-0 1.97 21.78 5.86 34.06 69.66 3.35 Average wd-0 1.15 12.11 4.09 15.19 31.12 2.80
显示内容包括:
device: sar命令正在监视的块设备的名字。 %busy: 设备忙时,传送请求所占时间的百分比。 avque: 队列站满时,未完成请求数量的平均值。 r+w/s: 每秒传送到设备或从设备传出的数据量。 blks/s: 每秒传送的块数,每块512字节。 avwait: 队列占满时传送请求等待队列空闲的平均时间。 avserv: 完成传送请求所需平均时间(毫秒)。
在显示的内容中,wd-0是硬盘的名字,%busy的值比较小,说明用于处理传送请求的有 效时间太少,文件系统效率不高,一般来讲,%busy值高些,avque值低些,文件系统 的效率比较高,如果%busy和avque值相对比较高,说明硬盘传输速度太慢,需调整。
例四:使用命行sar -b t n
例如,每30秒采样一次,连续采样5次,报告缓冲区的使用情况,需键入如下命令:
# sar -b 30 5
屏幕显示:
SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001 14:54:59 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s (-b) 14:55:29 0 147 100 5 21 78 0 0 14:55:59 0 186 100 5 25 79 0 0 14:56:29 4 232 98 8 58 86 0 0 14:56:59 0 125 100 5 23 76 0 0 14:57:29 0 89 100 4 12 66 0 0 Average 1 156 99 5 28 80 0 0
显示内容包括:
bread/s: 每秒从硬盘读入系统缓冲区buffer的物理块数。 lread/s: 平均每秒从系统buffer读出的逻辑块数。 %rcache: 在buffer cache中进行逻辑读的百分比。 bwrit/s: 平均每秒从系统buffer向磁盘所写的物理块数。 lwrit/s: 平均每秒写到系统buffer逻辑块数。 %wcache: 在buffer cache中进行逻辑读的百分比。 pread/s: 平均每秒请求物理读的次数。 pwrit/s: 平均每秒请求物理写的次数。
在显示的内容中,最重要的是%cache和%wcache两列,它们的值体现着buffer的使用效 率,%rcache的值小于90或者%wcache的值低于65,应适当增加系统buffer的数量,buffer 数量由核心参数NBUF控制,使%rcache达到90左右,%wcache达到80左右。但buffer参数 值的多少影响I/O效率,增加buffer,应在较大内存的情况下,否则系统效率反而得不到 提高。
例五:使用命行sar -g t n
例如,每30秒采样一次,连续采样5次,报告串口I/O的操作情况,需键入如下命令:
# sar -g 30 5
屏幕显示:
SCO_SV scosysv 3.2v5.0.5 i80386 11/22/2001 17:07:03 ovsiohw/s ovsiodma/s ovclist/s (-g) 17:07:33 0.00 0.00 0.00 17:08:03 0.00 0.00 0.00 17:08:33 0.00 0.00 0.00 17:09:03 0.00 0.00 0.00 17:09:33 0.00 0.00 0.00 Average 0.00 0.00 0.00
显示内容包括:
ovsiohw/s:每秒在串口I/O硬件出现的溢出。
ovsiodma/s:每秒在串口I/O的直接输入输出通道高速缓存出现的溢出。
ovclist/s :每秒字符队列出现的溢出。
在显示的内容中,每一列的值都是零,表明在采样时间内,系统中没有发生串口I/O溢 出现象。
sar命令的用法很多,有时判断一个问题,需要几个sar命令结合起来使用,比如,怀疑 CPU存在瓶颈,可用sar -u 和sar -q来看,怀疑I/O存在瓶颈,可用sar -b、sar -u和sar-d来看。 -------------------------------------------------------------------------------- Sar -A 所有的报告总和 -a 文件读,写报告 -B 报告附加的buffer cache使用情况 -b buffer cache使用情况 -c 系统调用使用报告 -d 硬盘使用报告 -g 有关串口I/O情况 -h 关于buffer使用统计数字 -m IPC消息和信号灯活动 -n 命名cache -p 调页活动 -q 运行队列和交换队列的平均长度 -R 报告进程的活动 -r 没有使用的内存页面和硬盘块 -u CPU利用率 -v 进程,i节点,文件和锁表状态 -w 系统交换活动 -y TTY设备活动
-a 报告文件读,写报告 sar –a 5 5 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002 11:45:40 iget/s namei/s dirbk/s (-a) 11:45:45 6 2 2 11:45:50 91 20 28 11:45:55 159 20 18 11:46:00 157 21 19 11:46:05 177 30 35 Average 118 18 20
iget/s 每秒由i节点项定位的文件数量 namei/s 每秒文件系统路径查询的数量 dirbk/s 每秒所读目录块的数量
*这些值越大,表明核心花在存取用户文件上的时间越多,它反映着一些程序和应用文件系统产生的负荷。一般地,如果iget/s与namei /s的比值大于5,并且namei/s的值大于30,则说明文件系统是低效的。这时需要检查文件系统的自由空间,看看是否自由空间过少。
-b 报告缓冲区(buffer cache)的使用情况 sar -b 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002 13:51:28 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s (-b) 13:51:30 382 1380 72 131 273 52 0 0 13:51:32 378 516 27 6 22 72 0 0 13:51:34 172 323 47 39 57 32 0 0 Average 310 739 58 58 117 50 0 0
bread/s 平均每秒从硬盘(或其它块设备)读入系统buffer的物理块数 lread/s 平均每秒从系统buffer读出的逻辑块数 %rcache 在buffer cache中进行逻辑读的百分比(即100% - bread/lreads) bwrit/s 平均每秒从系统buffer向磁盘(或其它块设备)所写的物理块数 lwrit/s 平均每秒写到系统buffer的逻辑块数 %wcache 在buffer cache中进行逻辑写的百分比(即100% - bwrit/lwrit). pread/sgu 平均每秒请求进行物理读的次数 pwrit/s 平均每秒请求进行物理写的次数
*所显示的内容反映了目前与系统buffer有关的读,写活。在所报告的数字中,最重要的是%rcache和%wcache(统称为 cache命中率)两列,它们具体体现着系统buffer的效率。衡量cache效率的标准是它的命中率值的大小。 *如果%rcache的值小于90或者%wcache的值低于65,可能就需要增加系统buffer的数量。如果在系统的应用中,系统的I/O活动十分频 繁,并且在内存容量配置比较大时,可以增加buffer cache,使%rcache达到95左右,%wcache达到80左右。 *系统buffer cache中,buffer的数量由核心参数NBUF控制。它是一个要调的参数。系统中buffer数量的多少是影响系统I/O效率的瓶颈。要增加系统 buffer数量,则要求应该有较大的内存配置。否则一味增加buffer数量,势必减少用户进程在内存中的运行空间,这同样会导致系统效率下降。
-c 报告系统调用使用情况 sar -c 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002 17:02:42 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s (-c) 17:02:44 2262 169 141 0.00 0.00 131250 22159 17:02:46 1416 61 38 0.00 0.00 437279 6464 17:02:48 1825 43 25 0.00 0.00 109397 42331 Average 1834 91 68 0.00 0.00 225975 23651
scall/s 每秒使用系统调用的总数。一般地,当4~6个用户在系统上工作时,每秒大约30个左右。 sread/s 每秒进行读操作的系统调用数量。 swrit/s 每秒进行写操作的系统调用数量。 fork/s 每秒fork系统调用次数。当4~6个用户在系统上工作时,每秒大约0.5秒左右。 exec/s 每秒exec系统调用次数。 rchar/s 每秒由读操作的系统调用传送的字符(以字节为单位)。 wchar/s 每秒由写操作的系统调用传送的字符(以字节为单位)。 *如果scall/s持续地大于300,则表明正在系统中运行的可能是效率很低的应用程序。在比较 典型的情况下,进行读操作的系统调用加上进行写操作的系统调用之和,约是scall的一半左右。
-d 报告硬盘使用情况 sar -d 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002 17:27:49 device %busy avque r+w/s blks/s avwait avserv (-d) 17:27:51 ida-0 6.93 1.00 13.86 259.41 0.00 5.00 ida-1 0.99 1.00 17.33 290.10 0.00 0.57 17:27:53 ida-0 75.50 1.00 54.00 157.00 0.00 13.98 ida-1 9.50 1.00 12.00 75.00 0.00 7.92 17:27:55 ida-0 7.46 1.00 46.77 213.93 0.00 1.60 ida-1 17.41 1.00 57.71 494.53 0.00 3.02 Average ida-0 29.85 1.00 38.14 210.28 0.00 7.83 ida-1 9.29 1.00 29.02 286.90 0.00 3.20
device 这是sar命令正在监视的块设备的名字。 %busy 设备忙时,运行传送请求所占用的时间。这个值以百分比表示。 avque 在指定的时间周期内,没有完成的请求数量的平均值。仅在队列被占满时取这个值。 r+w/s 每秒传送到设备或者从设备传送出的数据量。 blks/s 每秒传送的块数。每块512个字节。 avwait 传送请求等待队列空闲的平均时间(以毫秒为单位)。仅在队列被占满时取这个值。 avserv 完成传送请求所需平均时间(以毫秒为单位) *ida-0和ida-1是硬盘的设备名字。在显示的内容中,如果%busy的值比较小,说明用于处理 传送请求的有效时间太少,文件系统的效率不高。要使文件系统的效率得到优化,应使%busy的数值相对高一些,而avque的值应该低一些。
-g 报告有关串口I/O情况 sar -g 3 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 11:10:09 ovsiohw/s ovsiodma/s ovclist/s (-g) 11:10:12 0.00 0.00 0.00 11:10:15 0.00 0.00 0.00 11:10:18 0.00 0.00 0.00 Average 0.00 0.00 0.00
ovsiohw/s 每秒在串囗I/O硬件出现的溢出。 ovsiodma/s 每秒在串囗I/O的直接输入,输出信道高速缓存出现的溢出。 ovclist/s 每秒字符队列出现的溢出。
-m 报告进程间的通信活动(IPC消息和信号灯活动)情况 sar -m 4 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 13:24:28 msg/s sema/s (-m) 13:24:32 2.24 9.95 13:24:36 2.24 21.70 13:24:40 2.00 36.66 Average 2.16 22.76
msg/s 每秒消息操作的次数(包括发送消息的接收信息)。 sema/s 每秒信号灯操作次数。 *信号灯和消息作为进程间通信的工具,如果在系统中运行的应用过程中没有使用它们,那么由sar命令报告的msg 和sema的值都将等于0.00。如果使用了这些工具,并且其中或者msg/s大于100,或者sema/s大于100,则表明这样的应用程序效率比较 低。原因是在这样的应用程序中,大量的时间花费在进程之间的沟通上,而对保证进程本身有效的运行时间必然产生不良的影响。
-n 报告命名缓冲区活动情况 sar -n 4 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 13:37:31 c_hits cmisses (hit %) (-n) 13:37:35 1246 71 (94%) 13:37:39 1853 81 (95%) 13:37:43 969 56 (94%) Average 1356 69 (95%)
c_hits cache命中的数量。 cmisses cache未命中的数量。 (hit %) 命中数量/(命中数理+未命中数量)。 *不难理解,(hit %)值越大越好,如果它低于90%,则应该调整相应的核心参数。
-p 报告分页活动 sar -p 5 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 13:45:26 vflt/s pflt/s pgfil/s rclm/s (-p) 13:45:31 36.25 50.20 0.00 0.00 13:45:36 32.14 58.48 0.00 0.00 13:45:41 79.80 58.40 0.00 0.00 Average 49.37 55.69 0.00 0.00
vflt/s 每秒进行页面故障地址转换的数量(由于有效的页面当前不在内存中)。 pflt/s 每秒来自由于保护错误出现的页面故障数量(由于对页面的非法存,取引起的页面故障)。 pgfil/s 每秒通过”页—入”满足vflt/s的数量。 rclm/s 每秒由系统恢复的有效页面的数量。有效页面被增加到自由页面队列上。 *如果vflt/s的值高于100,可能预示着对于页面系统来说,应用程序的效率不高,也可能分页参数需要调整,或者内存配置不太合适。
-q 报告进程队列(运行队列和交换队列的平均长度)情况 sar -q 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 14:25:50 runq-sz %runocc swpq-sz %swpocc (-q) 14:25:52 4.0 50 14:25:54 9.0 100 14:25:56 9.0 100 Average 7.3 100
runq-sz 准备运行的进程运行队列。 %runocc 运行队列被占用的时间(百分比) swpq-sz 要被换出的进程交换队列。 %swpocc 交换队列被占用的时间(百分比)。 *如果%runocc大于90,并且runq-sz的值大于2,则表明CPU的负载较重。其直接后果,可能使系统的响应速度降低。如果%swpocc大于 20,表明交换活动频繁,将严重导致系统效率下降。解决的办法是加大内存或减少缓存区数量,从而减少交换及页—入,页—出活动。
-r 报告内存及交换区使用情况(没有使用的内存页面和硬盘块) sar -r 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 10:14:19 freemem freeswp availrmem availsmem (-r) 10:14:22 279729 6673824 93160 1106876 10:14:24 279663 6673824 93160 1106876 10:14:26 279661 6673824 93160 1106873 Average 279684 6673824 93160 1106875
freemem 用户进程可以使用的内存页面数,4KB为一个页面。 freeswp 用于进程交换可以使用的硬盘盘块,512B为一个盘块。
-u CPU利用率 sar -u 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 10:27:23 %usr %sys %wio %idle (-u) 10:27:25 2 3 8 88 10:27:27 3 3 5 89 10:27:29 0 0 0 100 Average 2 2 4 92 . %usr cpu处在用户模式下时间(百分比) %sys cpu处在系统模式下时间(百分比) %wio cpu等待输入,输出完成(时间百分比) %idle cpu空闲时间(百分比) *在显示的内容中,%usr和 %sys这两个值一般情况下对系统无特别影响,%wio的值不能太高,如果%wio的值过高,则CPU花在等待输入,输出上的时间太多,这意味着硬盘存在 I/O瓶颈。如果%idle的值比较高,但系统响应并不快,那么这有可能是CPU花时间等待分配内存引起的。%idle的值可以较深入帮助人们了解系统的 性能,在这种情况上,%idle的值处于40~100之间,一旦它持续低于30,则表明进程竟争的主要资源不是内存而是CPU。 *在有大量用户运行的系统中,为了减少CPU的压力,应该使用智能多串卡,而不是非智能多串卡。智能多串卡可以承担CPU的某些负担。 *此外,如果系统中有大型的作业运行,应该把它们合理调度,错开高峰,当系统相对空闲时再运行。
-v 报告系统表的内容(进程,i节点,文件和锁表状态) sar -v 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 10:56:46 proc-sz ov inod-sz ov file-sz ov lock-sz (-v) 10:56:48 449/ 500 0 994/4147 0 1313/2048 0 5/ 128 10:56:50 450/ 500 0 994/4147 0 1314/2048 0 5/ 128 10:56:52 450/ 500 0 994/4147 0 1314/2048 0 5/ 128
proc-sz 目前在核心中正在使用或分配的进程表的表项数 inod-sz 目前在核心中正在使用或分配的i节点表的表项数 file-sz 目前在核心中正在使用或分配的文件表的表项数 ov 溢出出现的次数 lock-sz 目前在核心中正在使用或分配的记录加锁的表项数 *除ov外,均涉及到unix的核心参数,它们分别受核心参数NPROC,NIMODE,NFILE和FLOCKREC的控制。 *显示格式为: 实际使用表项/整个表可以使用的表项数 比如,proc-sz一列所显示的四个数字中,分母的100是系统中整个进程表的长度(可建立100个表项),分子上的24,26和25分别是采样的那一段时间所使用的进程表项。inod-sz,file-sz和lock-sz三列数字的意义也相同。 三列ov的值分别对应进程表,i节点表和文件表,表明目前这三个表都没有出现溢出现象,当出现溢出时,需要调整相应的核心参数,将对应表加大。
-w 系统交换活动 sar -w 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 11:22:05 swpin/s bswin/s swpot/s bswots pswch/s (-w) 11:22:07 0.00 0.0 0.00 0.0 330 11:22:09 0.00 0.0 0.00 0.0 892 11:22:11 0.00 0.0 0.00 0.0 1053 Average 0.00 0.0 0.00 0.0 757
swpin/s 每秒从硬盘交换区传送进入内存的次数。 bswin/s 每秒为换入而传送的块数。 swpot/s 每秒从内存传送到硬盘交换区的次数。 bswots 每秒为换出而传送的块数。 pswch/s 每秒进程交换的数量。 *swpin/s,bswin/s,swpot/s和bswots描述的是与硬盘交换区相关的交换活动。交换关系到系统的效率。交换区在硬盘上对硬盘的 读,写操作比内存读,写慢得多,因此,为了提高系统效率就应该设法减少交换。通常的作法就是加大内存,使交换区中进行的交换活动为零,或接近为零。如果 swpot/s的值大于1,预示可能需要增加内存或减少缓冲区(减少缓冲区能够释放一部分自由内存空间)。
-y 报告终端的I/O活动(TTY设备活动)情况 sar -y 2 3 SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 11:38:03 rawch/s canch/s outch/s rcvin/s xmtin/s mdmin/s (-y) 11:38:05 5 0 951 0 1 0 11:38:07 10 0 996 0 0 0 11:38:09 4 0 2264 0 0 0 Average 6 0 1404 0 1 0
rawch/s 每秒输入的字符数(原始队列) canch/s 每秒由正则队列(canonical queue)处理的输入字符数。进行正则处理过程中,可以识别出一些有特殊意义的字符。比如,(中断字符),(退出符),(退格键)等。因此,canch/s中的计数不包括这些有特殊意义的字符。 outch/s 每秒输出的字符数。 rcvin/s 每秒接收的硬件中断次数。 xmtin/s 每秒发出的硬件中断次数。 mdmin/s 每秒modem中断次数。 *应该特别说明,sar命令可以对任意终端活动进行统计,所谓任意终端,是指任意tty设备。它们可以是串行终端,主控台,伪终端等等。 *在这几个量中,modem中断次数mdmin/s应该接近0。其它没有特殊要求,但如果每发送一个字符,中断的数量就动态地增加,这表明终端线出了差错,可能是接触不好。 -
awk处理一条记录占据多行的情况
2009-03-23 11:35:51
假设有记录占据了三行,两个记录。
以前都是使用sed去读取。不停的变化行数来实现。
后来想象,awk的功能,我应该还没有挖掘到底。
需要把更多的逻辑运算通过awk来完成。
echo '
111
222
333
4444
555
666
'|awk 'BEGIN{FS="\n";RS="";}{for(i=1;i<NF;i++) {print $i,$(++i),$(++i)}}'
111 222 333
4444 555 666 -
《鸟哥的linux私房菜》与《linux系统管理手册第二版》到手
2009-03-20 02:37:16
看了red hat的招聘,感觉挺高端的。
项目中用到的linux技术很多,很多人都不懂,最近公司在讨论一些分布式的话题,我也是一点都不懂。
谈的都是架构的问题。发现自己的技术还是欠缺很多。
突然萌发了一个想法。想学习一下linux,转去red hat这样的大公司作测试。做上一年。学到的技术,应该就可以为国内的这些公司服务了。
现在在公司,自己什么都不是。也不能老是这样。
要尽快由菜鸟变成凤凰。
学习linux。自己的shell在公司已经无敌了。开始转入高端的领域学习吧。
同时坚持学习英语。等英语过关了,linux也就是小菜一碟了。
-
shell函数之getopts使用
2009-03-13 19:53:31
困扰了很久,我使用的是函数式编程,脚本里经常使用的getopts,放在函数中就是不行。今天终于解决了。
铭记一下。
showopts () {
unset OPTIND
while getopts "pq:" optname
do
echo $optname
case "$optname" in
"p")
echo "Option $optname is specified"
;;
"q")
echo "Option $optname has value $OPTARG"
;;
"?")
echo "Unknown option $OPTARG"
;;
":")
echo "No argument value for option $OPTARG"
;;
*)
# Should not occur
echo "Unknown error while processing options"
;;
esac
done
}
-
写得蛮好的linux学习笔记(转)
2009-03-12 23:24:28
linux目录架构
/ 根目录
/bin 常用的命令 binary file 的目錄
/boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内
/boot/grub/menu.lst GRUB设置
/boot/vmlinuz 内核
/boot/initrd 核心解壓縮所需 RAM Disk
/dev 系统周边设备
/etc 系统相关设定文件
/etc/DIR_COLORS 设定颜色
/etc/HOSTNAME 设定用户的节点名
/etc/NETWORKING 只有YES标明网络存在
/etc/host.conf 文件说明用户的系统如何查询节点名
/etc/hosts 设定用户自已的IP与名字的对应表
/etc/hosts.allow 设置允许使用inetd的机器使用
/etc/hosts.deny 设置不允许使用inetd的机器使用
/etc/hosts.equiv 设置远端机不用密码
/etc/inetd.conf 设定系统网络守护进程inetd的配置
/etc/gateways 设定路由器
/etc/protocols 设定系统支持的协议
/etc/named.boot 设定本机为名字服务器的配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 设置IP
/etc/resolv.conf 设置DNS
/etc/X11 X Window的配置文件,xorg.conf 或 XF86Config 這兩個 X Server 的設定檔
/etc/fstab 记录开机要mount的文件系统
/etc/inittab 设定系统启动时init进程将把系统设置成什么样的runlevel
/etc/issue 记录用户登录前显示的信息
/etc/group 设定用户的组名与相关信息
/etc/passwd 帐号信息
/etc/shadow 密码信息
/etc/sudoers 可以sudo命令的配置文件
/etc/securetty 设定哪些终端可以让root登录
/etc/login.defs 所有用户登录时的缺省配置
/etc/exports 设定NFS系统用的
/etc/init.d/ 所有服務的預設啟動 script. 都是放在這裡的,例如要啟動或者關閉
/etc/xinetd.d/ 這就是所謂的 super daemon 管理的各項服務的設定檔目錄
/etc/modprobe.conf 内核模块额外参数设定
/etc/syslog.conf 日志设置文件
/home 使用者家目录
/lib 系统会使用到的函数库
/lib/modules kernel 的相关模块
/var/lib/rpm rpm套件安装处
/lost+found 系統不正常產生錯誤時,會將一些遺失的片段放置於此目錄下
/mnt 外设的挂载点
/media 与/mnt类似
/opt 主机额外安装的软件
/proc 虚拟目录,是内存的映射
/proc/version 内核版本
/proc/sys/kernel 系统内核功能
/root 系统管理员的家目录
/sbin 系统管理员才能执行的指令
/srv 一些服務啟動之後,這些服務所需要取用的資料目錄
/tmp 一般使用者或者是正在執行的程序暫時放置檔案的地方
/usr 最大的目录,存许应用程序和文件
/usr/X11R6: X-Window目录
/usr/src: Linux源代码
/usr/include:系统头文件
/usr/openwin 存放SUN的OpenWin
/usr/man 在线使用手册
/usr/bin 使用者可執行的 binary file 的目錄
/usr/local/bin 使用者可執行的 binary file 的目錄
/usr/lib 系统会使用到的函数库
/usr/local/lib 系统会使用到的函数库
/usr/sbin 系统管理员才能执行的指令
/usr/local/sbin 系统管理员才能执行的指令
/var 日志文件
/var/log/secure 記錄登入系統存取資料的檔案,例如 pop3, ssh, telnet, ftp 等都會記錄在此檔案中
/var/log/wtmp 記錄登入者的訊息資料, last
/var/log/messages 幾乎系統發生的錯誤訊息
/var/log/boot.log 記錄開機或者是一些服務啟動的時候,所顯示的啟動或關閉訊息
/var/log/maillog 紀錄郵件存取或往來( sendmail 與 pop3 )的使用者記錄
/var/log/cron 記錄 crontab 這個例行性服務的內容
/var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log:
分別是幾個不同的網路服務的記錄檔一些常用的基本命令:
uname -a 查看内核版本
ls -al 显示所有文件的属性
pwd 显示当前路径
cd - 返回上一次目录 cd ~ 返回主目录
date s 设置时间、日期
cal 显示日历 cal 2006
bc 计算器具
man & info 帮助手册
locale 显示当前字体 locale -a 所有可用字体 /etc/sysconfig/i18n设置文件
LANG=en 使用英文字体
sync 将数据同步写入硬盘
shutdonw -h now & half & poweroff 关机
reboot 重启
startx & init 5 进入图形介面
/work & ?work 向上、下查找文档内容
chgrp 改变档案群组 chgrp testing install.log
chown 改变所属人 chown root:root install.log
chmod 改变属性 chmod 777 install.log read=4 write=2 execute=1
cp 复制 cp filename
rm 删除文件 rm -rf filename 强制删除文件
rmdir 删除文件夹
mv 移动 mv 123.txt 222.txt 重命名
mkdir 创建文件夹
touch 创建文件 更新当前时间
cat 由第一行开始显示 cat |more 分页
nl 在内容前加行号
more & less 一面一面翻动
head -n filename 显示第N行内容
tail -n filename 显示后N行内容
od 显示非纯文档
df -h 显示分区空间
du 显示目录或文件的大小
fdisk 分区设置 fdisk -l /dev/hda 显示硬盘分区状态
mkfs 建立各种文件系统 mkfs -t ext3 /dev/ram15
fsck 检查和修复LINUX档案
ln 硬链接 ln -s 软件链接
whereis 查找命令
locate 查找
find 查找 find / -name "***.***"
which 查看工具
whoami 显示当前用户
gcc -v 查看GCC版本
chattr +i filename 禁止删除 chattr -i filename 取消禁止
lsattr 显示隐藏档属性
updatedb 更新资料库
mke2fs 格式化 mkfs -t ext3
dd if=/etc/passwd f=/tmp/passwd.bak 备份
mount 列出系统所有的分区
mount -t iso9660 /dev/cdrom /mnt/cdrom 挂载光盘
mount -t vfat /dev/fd0 /mnt/floppy 挂载软盘
mount -t vfat -o iocharset=utf8,umask=000 /dev/hda2 /mnt/hda2 挂载fat32分区
mount -t ntfs -o nls=utf8,umask=000 /dev/hda3 /mnt/hda3 挂载ntfs分区
Linux-NTFS Project: http://linux-ntfs.sourceforge.net/
umount /mnt/hda3 缷载
ifconfig 显示或设置网络设备
service network restart 重启网卡
ifdown eth0 关闭网卡
ifup eth0 开启网卡
clear 清屏
history 历史记录 !55 执行第55个指令
stty 设置终端 stty -a
fdisk /mbr 删除GRUB
at 僅進行一次的工作排程
crontab 循環執行的例行性命令 [e]编辑,[l]显示,[r]删除任务
& 后台运行程序 tar -zxvf 123.tar.gz & --------->后台运行
jobs 观看后台暂停的程序 jobs -l
fg 将后台程序调到前台 fg n ------>n是数字,可以指定进行那个程序
bg 让工作在后台运行
kill 结束进程 kill -9 PID [9]强制结束,[15]正常结束,[l]列出可用的kill信号
ps aux 查看后台程序
top 查看后台程序 top -d 2 每两秒更新一次 top -d 2 -p10604 观看某个PID
top -b -n 2 > /tmp/top.txt ----->將 top 的資訊進行 2 次,然後將結果輸出到 /tmp/top.txt
pstree 以树状图显示程序 [A]以 ASCII 來連接, [u]列出PID, [p]列出帐号
killall 要刪除某個服務 killall -9 httpd
free 显示内存状态 free -m -------->以M为单位显示
uptime 显示目前系统开机时间
netstat 显示网络状态 netstat -tulnp------>找出目前系統上已在監聽的網路連線及其 PID
dmesg 显示开机信息 demsg | more
nice 设置优先权 nice -n -5 vi & ----->用 root 給一個 nice 植為 -5 ,用於執行 vi
renice 调整已存在优先权
runlevel 显示目前的runlevel
depmod 分析可载入模块的相依性
lsmod 显示已载入系统的模块
modinfo 显示kernel模块的信息
insmod 载入模块
modprobe 自动处理可载入模块
rmmod 删除模块
chkconfig 检查,设置系统的各种服务 chkconfig --list ----->列出各项服务状态
ntsysv 设置系统的各种服务
cpio 备份文件
压缩命令:
*.Z compress 程式壓縮的檔案;
*.bz2 bzip2 程式壓縮的檔案;
*.gz gzip 程式壓縮的檔案;
*.tar tar 程式打包的資料,並沒有壓縮過;
*.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮
compress filename 压缩文件 加[-d]解压 uncompress
gzip filename 压缩 加[-d]解压 zcat 123.gz 查看压缩文件内容
bzip2 -z filename 压缩 加[-d]解压 bzcat filename.bz2 查看压缩文件内容
tar -cvf /home/123.tar /etc 打包,不压缩
tar -xvf 123.tar 解开包
tar -zxvf /home/123.tar.gz 以gzip解压
tar -jxvf /home/123.tar.bz2 以bzip2解压
tar -ztvf /tmp/etc.tar.gz 查看tar内容
cpio -covB > [file|device] 份份
cpio -icduv < [file|device] 还原vi一般用法
一般模式 编辑模式 指令模式
h 左 a,i,r,o,A,I,R,O :w 保存
j 下 进入编辑模式 :w! 强制保存
k 上 dd 删除光标当前行 :q! 不保存离开
l 右 ndd 删除n行 :wq! 保存后离开
0 移动到行首 yy 复制当前行 :e! 还原原始档
$ 移动到行尾 nyy 复制n行 :w filename 另存为
H 屏幕最上 p,P 粘贴 :set nu 设置行号
M 屏幕中央 u 撤消 :set nonu 取消行号
L 屏幕最下 [Ctrl]+r 重做上一个动作 ZZ 保存离开
G 档案最后一行 [ctrl]+z 暂停退出 :set nohlsearch 永久地关闭高亮显示
/work 向下搜索 :sp 同时打开两个文档
?work 向上搜索 [Ctrl]+w 两个文档设换
gg 移动到档案第一行 :nohlsearch 暂时关闭高亮显示认识SHELL
alias 显示当前所有的命令别名 alias lm="ls -al" 命令别名 unalias lm 取消命令别名
type 类似which
exprot 设置或显示环境变量
exprot PATH="$PATH":/sbin 添加/sbin入PATH路径
echo $PATH 显示PATH路径
bash 进入子程序
name=yang 设定变量
unset name 取消变量
echo $name 显示变量的内容
myname="$name its me" & myname='$name its me' 单引号时$name失去变量内容
ciw=/etc/sysconfig/network-scripts/ 设置路径
env 列出所有环境变量
echo $RANDOM 显示随意产生的数
set 设置SHELL
PS1='[\u@\h \w \A #\#]\$ ' 提示字元的設定
[root@linux ~]# read [-pt] variable -----------读取键盘输入的变量
參數:
-p :後面可以接提示字元!
-t :後面可以接等待的『秒數!』
declare 声明 shell 变量
ulimit -a 显示所有限制资料
ls /tmp/yang && echo "exist" || echo "not exist"
意思是說,當 ls /tmp/yang 執行後,若正確,就執行echo "exist" ,若有問題,就執行echo "not exist"
echo $PATH | cut -d ':' -f 5 以:为分隔符,读取第5段内容
export | cut -c 10-20 读取第10到20个字节的内容
last | grep 'root' 搜索有root的一行,加[-v]反向搜索
cat /etc/passwd | sort 排序显示
cat /etc/passwd | wc 显示『行、字数、字节数』正规表示法
[root@test root]# grep [-acinv] '搜尋字串' filename
參數說明:
-a :將 binary 檔案以 text 檔案的方式搜尋資料
-c :計算找到 '搜尋字串' 的次數
-i :忽略大小寫的不同,所以大小寫視為相同
-n :順便輸出行號
-v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行!
grep -n 'the' 123.txt 搜索the字符 -----------搜尋特定字串
grep -n 't[ea]st' 123.txt 搜索test或taste两个字符---------利用 [] 來搜尋集合字元
grep -n '[^g]oo' 123.txt 搜索前面不为g的oo-----------向選擇 [^]
grep -n '[0-9]' 123.txt 搜索有0-9的数字
grep -n '^the' 123.txt 搜索以the为行首-----------行首搜索^
grep -n '^[^a-zA-Z]' 123.txt 搜索不以英文字母开头
grep -n '[a-z]$' 123.txt 搜索以a-z结尾的行---------- 行尾搜索$
grep -n 'g..d' 123.txt 搜索开头g结尾d字符----------任意一個字元 .
grep -n 'ooo*' 123.txt 搜索至少有两个oo的字符---------重複字元 *
sed 文本流编辑器 利用脚本命令来处理文本文件
awd 模式扫描和处理语言
nl 123.txt | sed '2,5d' 删除第二到第五行的内容
diff 比较文件的差异
cmp 比较两个文件是否有差异
patch 修补文件
pr 要打印的文件格式化
帐号管理
/etc/passwd 系统帐号信息
/etc/shadow 帐号密码信息 经MD5 32位加密
在密码栏前面加『 * 』『 ! 』禁止使用某帐号
/etc/group 系统群组信息
/etc/gshadow
newgrp 改变登陆组
useradd & adduser 建立新用户 ---------> useradd -m test 自动建立用户的登入目录
useradd -m -g pgroup test --------->指定所属级
/etc/default/useradd 相关设定
/etc/login.defs UID/GID 有關的設定
passwd 更改密码 -----------> passwd test
usermod 修改用户帐号
userdel 删除帐号 ----------->userdel -r test
chsh 更换登陆系统时使用的SHELL [-l]显示可用的SHELL;[-s]修改自己的SHELL
chfn 改变finger指令显示的信息
finger 查找并显示用户信息
id 显示用户的ID -----------> id test
groupadd 添加组
groupmod 与usermod类似
groupdel 删除组
su test 更改用户 su - 进入root,且使用root的环境变量
sudo 以其他身份来执行指令
visudo 编辑/etc/sudoers 加入一行『 test ALL=(ALL) ALL 』
%wheel ALL = (ALL) ALL 系统里所有wheel群组的用户都可用sudo
%wheel ALL = (ALL) NOPASSWD: ALL wheel群组所有用户都不用密码NOPASSWD
User_Alias ADMPW = vbird, dmtsai, vbird1, vbird3 加入ADMPW组
ADMPW ALL = NOPASSWD: !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \
!/usr/bin/passwd root 可以更改使用者密码,但不能更改root密码 (在指令前面加入 ! 代表不可)
PAM (Pluggable Authentication Modules, 嵌入式模組)
who & w 看谁在线
last 最近登陆主机的信息
lastlog 最近登入的時間 读取 /var/log/lastlog
talk 与其他用户交谈
write 发送信息 write test [ctrl]+d 发送
mesg 设置终端机的写入权限 mesg n 禁止接收 mesg y
wall 向所有用户发送信息 wall this is q test
mail 写mail
/etc/default/useradd 家目录默认设置quota 显示磁盘已使用的空间与限制 quota -guvs ----->秀出目前 root 自己的 quota 限制值
quota -vu 查询
quotacheck 检查磁盘的使用空间与限制 quotacheck -avug ----->將所有的在 /etc/mtab 內,含有 quota 支援的 partition 進行掃瞄
[-m] 强制扫描
quota一定要是独立的分区,要有quota.user和quota.group两件文件,在/etc/fstab添加一句:
/dev/hda3 /home ext3 defaults,usrquota,grpquota 1 2
chmod 600 quota* 设置完成,重启生效
edquota 编辑用户或群组的quota [u]用户,[g]群组,[p]复制,[t]设置宽限期限
edquota -a yang edquota -p yang -u young ----->复制
quotaon 开启磁盘空间限制 quotaon -auvg -------->啟動所有的具有 quota 的 filesystem
quotaoff 关闭磁盘空间限制 quotaoff -a -------->關閉了 quota 的限制
repquota -av 查閱系統內所有的具有 quota 的 filesystem 的限值狀態Quota 從開始準備 filesystem 的支援到整個設定結束的主要的步驟大概是:
1、設定 partition 的 filesystem 支援 quota 參數:
由於 quota 必須要讓 partition 上面的 filesystem 支援才行,一般來說, 支援度最好的是 ext2/ext3 ,
其他的 filesystem 類型鳥哥我是沒有試過啦! 啟動 filesystem 支援 quota 最簡單就是編輯 /etc/fstab ,
使得準備要開放的 quota 磁碟可以支援 quota 囉;
2、建立 quota 記錄檔:
剛剛前面講過,整個 quota 進行磁碟限制值記錄的檔案是 aquota.user/aquota.group,
要建立這兩個檔案就必須要先利用 quotacheck 掃瞄才行喔!
3、編輯 quota 限制值資料:
再來就是使用 edquota 來編輯每個使用者或群組的可使用空間囉;
4、重新掃瞄與啟動 quota :
設定好 quota 之後,建議可以再進行一次 quotacheck ,然後再以 quotaon 來啟動吧!
开机流程简介
1、載入 BIOS 的硬體資訊,並取得第一個開機裝置的代號;
2、讀取第一個開機裝置的 MBR 的 boot Loader (亦即是 lilo, grub, spfdisk 等等) 的開機資訊;
3、載入 Kernel 作業系統核心資訊, Kernel 開始解壓縮,並且嘗試驅動所有硬體裝置;
4、Kernel 執行 init 程式並取得 run-level 資訊;
5、init 執行 /etc/rc.d/rc.sysinit 檔案;
6、啟動核心的外掛模組 (/etc/modprobe.conf);
7、init 執行 run-level 的各個批次檔( Scripts );
8、init 執行 /etc/rc.d/rc.local 檔案;
9、執行 /bin/login 程式,並等待使用者登入;
10、登入之後開始以 Shell 控管主機。在/etc/rc.d/rc3.d內,以S开头的为开机启动,以K开头的为关闭,接着的数字代表执行顺序GRUB vga设定
彩度\解析度 640x480 800x600 1024x768 1280x1024 bit
256 769 771 773 775 8 bit
32768 784 787 790 793 15 bit
65536 785 788 791 794 16 bit
16.8M 786 789 792 795 32 bit
./configure 检查系统信息 ./configure --help | more 帮助信息
make clean 清除之前留下的文件
make 编译
make install 安装rpm -q ----->查询是否安装 rpm -ql ------>查询该套件所有的目录
rpm -qi ----->查询套件的说明资料 rpm -qc[d] ----->设定档与说明档
rpm -ivh ---->安装 rpm -V -------->查看套件有否更动过
rpm -e ------>删除 rpm -Uvh ------->升级安装
--nodeps ----->强行安装 --test ----->测试安装 -
Linux查看系统配置常用命令
2009-03-12 10:13:00
系统
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量
资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载
磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况
网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息
进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态
用户
# w # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务
服务
# chkconfig --list # 列出所有系统服务
# chkconfig --list | grep on # 列出所有启动的系统服务
程序
# rpm -qa # 查看所有安装的软件包 -
shell之函数式脚本
2009-03-06 22:31:28
自己最近纯粹吃饱撑的了。
想把多个性能测试的case用脚本去实现。
目前已经实现了大部分了。只差一点点了。
不止一次的问自己,真的是没有必要。自己越来越懒了。
越来越依赖自己的脚本了。
发现了写脚本的一个非常不错的方法。
采用函数编程。
gexec $search_list $proxy_list logsave 2>&1 |tee logsave.txt #save log #去所有的search和proxy上去保存日志可以在每个机器上,修改启动脚本,增加关于logsave的定义,实现不同角色的个性定义。
发现这个方法非常的棒,解决了不少问题,记录一下。
abenchloadm()
{
[ $# -eq 0 ]&&echo "abenchloadm paramters ip port datadir
example abenchload -s 7200 -p 18 -k 119.42.239.38 2312 offer_url"&&return||echo "OK,start abench"
[[ `echo $*|grep "\-p"` ]]&&(echo $*|grep "\-k"&&print "OK,-p with -k"||print "Be carefull , no -k")
#all the history operations would be record in the abench.log , you can use it to check history .
seven #reload seven.sh and $USER.sh
abench_log=abench.log
now=`date +%Y%m%d%H%M`
#show the start time and parameters and save them to abench.log
echo $*
echo "Start at $now
$* " >>$abench_log
#invoke abench and give it the parameters
abench -l abench_$now.log $* 2>&1|tee abench_$now
timestop=`date +"%m/%d/%Y %H:%M"`
echo "End at `date +%Y%m%d%H%M` " >>$abench_log
#get the time and format it for simon
timestart="${now:4:2}/${now:6:2}/${now:0:4} ${now:8:2}:${now:10}"
#invoke report function for get the urls of simon and some basic infomation
reportm "$timestart" "$timestop" >report_${now}.htm #生成相关simon图报告,此函数不同之前的report,它可以提供机器列表的资源占用信息,比如cpu,memuser之类的,并统计出search的平均指标作为参考。
echo start save log
gexec $search_list $proxy_list logsave 2>&1 |tee logsave.txt #save log #去所有的search和proxy上去保存日志
echo start get config
gexec $search_list $proxy_list '{ cd $install_dir/etc; getconfig;check root=; } ' > config.txt 2>&1 #check config #去所有机器上收集配置信息,以备检查。
echo start check log
glogcheck|uniq -c > logcheck.txt 2>&1 #check log #去所有机器上分析日志
#mail you the result by attachments
echo start send mail
echo "$*"|mutt -s AT@`hostname` -a abench_$now -a report_${now}.htm -a logsave.txt -a logcheck.txt -a config.txt $mail_addr #发送所有结果到你的工作信箱
#if you setted the mobie_mail var , it will notice you by a sms
if [[ -n $mobile_mail ]] #设置手机邮箱的话,就发短信提醒。
then
qps="qps=`cat abench_$now|grep "query per second"|awk -F: '{print $2}'`"
art="art=`cat abench_$now|grep "average response time"|awk -F: '{print $2}'`"
echo "`cat abench_$now` "|mutt -s "$qps $art cmd abenchloadm $*" $mobile_mail
fi
}
标题搜索
我的存档
数据统计
- 访问量: 164321
- 日志数: 227
- 建立时间: 2008-04-09
- 更新时间: 2012-02-10