Archive

Archive for October, 2006

强大的Screen

October 29th, 2006 Fwolf 2 comments

使用过unix、linux、bsd系统的人应该都体验过shell的强大功能,尤其是配合openssh使用,可以方便的管理远程主机,这也几乎是远程维护服务器的最高效的方式了。

但是shell也有一个小缺陷,那就是缺少窗口界面下的“多窗口”功能,用户的操作是单线性的,无法暂停去处理其他事务,然后再回来,常用的解决办法应该是多开几个ssh窗口,这样是不是太笨了呢?注意我只是说用户操作是单线性的,系统的处理仍然是多用户多任务的,把任务放到后台处理不属于“用户操作”范畴。

其实,借助强大的Screenscreen的另外一个家)这个程序,我们可以在简陋的命令行操作方式下模拟多窗口的运行模式。Screen的主要功能是使一个用户登录能够同时打开多个shell进行操作,每个shell互不影响,如果把shell比作“窗口”的话,Screen就可以让你打开无数个“窗口”。

有了Screen的帮助,就不需要再打开许多个terminal窗口了,只要打开一个,并且进入screen,就可以随用随开shell了。比如说,我要在a目录下编辑程序,然后在b目录下运行程序,然后在c目录下查看errorlog,那么在打开screen之后,在默认的shell中cd a目录,这是第一个“窗口”,然后按Ctrl+a c键,注意是按住Ctrl键和a键,然后单独按一下c键,就打开了第二个“窗口”,在这个shell中cd b目录即可,同理打开第三个shell,cd c目录。“窗口”之间的切换主要有两种方式,一种是Ctrl+a p跳到前一个窗口,Ctrl+a n跳到后一个窗口,另一种方式是用Ctrl+a “显示出窗口列表进行选择,方便吧,手指不用离开键盘就完成了。如果窗口太多分不清了,还可以用Ctrl+a A给窗口起标题。

从上面的例子可以看出Screen的命令都是以Ctrl+a开头的,常用的命令还有(注意开头的Ctrl+a省略了,并且要注意大小写和控制键): C 清屏 Ctrl+D 或者 d 从当前的screen中跳出来,相当于“休眠”,以后还可以再连接上 h 截屏,屏幕上的字符内容会存为一个hardcopy文件 ? 显示帮助信息,常用的按键都有说明 k 关闭当前“窗口” c 开一个新窗口 n 下一个窗口 p 上一个窗口 ” 显示窗口列表 A 定义当前窗口的标题

按键看似复杂,用的多了自然就会熟悉并记住了,大家也可以参考一下另一份按键说明

Screen的另外一个用法要稍微特殊一些,这么说吧,比如你开了n个窗口正在工作,突然有事要停下来,暂时关闭掉作别的事,或者是在公司没作完回家接着作,抑或是到服务器的网络连接断掉了,那么你已经打开的n个窗口、你的工作状态能不能保留呢?答案当然是肯定的!这也是Screen的一大特色,遇到上述情况,你只要Ctrl+a d就从screen的工作界面中跳出来了,回到正常的shell环境,什么时候想回来了,再使用screen -r命令就又能连接到你刚才的工作状态继续工作了。即使是在公司的screen没有用Ctrl+a d命令进行deatach,还可以用screen -x把控制权“抢”过来,嘿嘿。

Screen还具有log功能,使用Screen -L命令启动,就会在用户的home目录下自动生成screenlog.?文件,其中?是你在screen中开的“窗口”号,默认第一个为0。这样用户在screen中的所有操作就都可以记录下来了,不管是为了写文章还是存档用都很方便。不过screenlog中还记录了Escape Code信息,所以直接用vi或者less查看很不方便,cat出来倒是原汁原味,保存了彩色shell的所有颜色,但毕竟不方便,所以我自己写了一个把screenlog转换为html代码的工具,自己觉得还有点用吧。

screenlog中的颜色和linux shell中的颜色一样,都是用Escape Code中的颜色代码来实现的,关于这些颜色代码,Pradeep Padala有一篇文章介绍的比较详细,值得学习一下。

熟悉和掌握screen对工作学习都有很大帮助的,记得原来讨论远程桌面vnc的时候,一位牛人就曾经说过ssh+screen是最强大的,现在自己也有了相应的环境,果然言如其实,nix主机的管理大可扔掉远程桌面软件了。

PS: 在写上面那个screenlog转换工具的时候顺便发掘了一个正则表达式检测工具,不知道是哪位不知名的前辈流传到网上的,十分好用,只是js代码不太标准,在firefox下无法使用,我就对它小小的动了一点手术,解决了兼容性的问题,反正我在Linux+Firefox下是可以用的,地址:http://www.fwolf.com/tools/regex_test.html

Related posts

Categories: Linux, Tools Tags:

送别永远的舒马赫

October 23rd, 2006 Fwolf 2 comments

今天的巴西大奖赛无疑是舒马赫精彩的收山之作,虽然他没有登上领奖台,但他在我心中仍然是这场比赛的胜者。

我看F1比较晚,是从大约2003、2004年开始的,舒马赫和巴里切罗驾驶红色法拉利战车包揽一、二名的镜头仍然记忆犹新,还有一次是2004年陪lp逛商场,我就在商场的某个楼梯口看电视转播,lp自己去逛,谁让这时间和F1比赛冲突了呢,结果就看见巴里切罗在18个弯道的赛场的最后一圈的倒数第三个弯道超越特鲁力的精彩,从那以后,疯狂的迷上了F1,只是cctv的直播总是掉链子。

上一场比赛我由于上班没有看,事后知道了舒马赫爆缸退赛的消息,和所有舒迷一样,即为他感到惋惜,又盼望奇迹出现。但老天还是公平的,今天的比赛虽然没有奇迹出现,老天还是给了舒马赫一次完美表演的机会。

第10位发车,一路追到了费斯切拉后面,超越之后,却被费斯切拉蹭了一下左后轮爆胎。带着浓厚的个人情感和不太好使的眼神,我觉得这是费斯切拉故意之为,唉,留给后人评说吧。舒马赫不负众望得用三个轮胎把赛车开到了维修站,这点难度对他来说已经不算什么了,修整过后,重新杀回赛场,名列最后一位——17位。

之后就是一系列的超车,或许是车手们都为舒马赫的执着所感动,或许为他的人格所折服,或许是杀红了眼的舒马赫确实锐不可挡,超车都很顺利,甚至在超越Heifield的时候,我感觉Heifield很敬重的让车王通过了,籍此表达车手之间的敬意。

对费斯切拉的第二次超越简直就是神来之笔,主持人说的“兵不血刃”也丝毫不夸张,有了第一次超车失败的教训之后,舒马赫没有再次莽撞,而是紧盯对手,给予对方极大的压力,然后在上一次超车同一个弯道虚晃一枪,从回放看得很清楚,舒马赫根本就没有加速的迹象,迫使极度紧张的对手犯下了致命的错误,为了封堵车道在高速下坡弯道选择了晚刹车,结果费斯切拉带着一缕青烟冲出了塞道,舒马赫顺利超越。

然后就是对kimi莱科宁的超越了,这位年轻而实力不凡的车手面对舒马赫并没有丝毫让步,死死的守着自己的位置,而舒马赫也终于不负众望,硬生生的杀出了一条血路,把莱科宁挤到了外道上并成功超越,当时两车的距离近得比周星驰的脖子离紫霞的剑还要近,相信很多观众也和我一样瞪大了眼睛,担心会撞到一起。老天保佑,两位车手相安无事,舒马赫成功完成了超越,相信莱科宁也会心服口服。

接下来的比赛已经没有几圈了,马萨成为13年来首位在本土夺得分站赛冠军的巴西车手,阿隆索也如愿卫冕年度车手总冠军成功。

虽然舒马赫的最后一场F1比赛只获得了第4名,但是,舒马赫用他的实际行动,向他的车迷,向所有法拉利车迷,向所有热爱F1的人们证明了,他是一位永不放弃的德国人,他是我们心中永远的胜者,永远的车神。

舒马赫,用自己的坚韧,为F1历史写下了光辉的一页,让我们永远记住他吧,Michael Schumacher,永远的舒马赫。

PS: 搜狗文品指数评价本文:“颇具备几分古典韵味,行文流畅,厚重感十足;沉积下来的底蕴,具备浓郁的历史感。词藻华丽雅致,文风绚烂;架构清晰,逻辑性强,情节缜密,可读性强;在用词范围方面可以着重下功夫改进。”,嘿嘿,有巴金的一点点味道呦。

搜狗文品指数

Related posts

Categories: Living Tags:

Fwolf’s Blog > Dash

October 21st, 2006 Fwolf No comments

Fwolf's Blog > Dash

今天突然在firefox的标签中看到了“Fwolf’s Blog > Dash”。

应该有很多人知道Dash吧,不知道的也应该知道VeryCD,至少也知道电驴,或者再差一点下载总应该听说过吧。

Dash就是VeryCD的老大,尽管很多人担心VeryCD的版权问题,也有人抱怨他们对驴子作了一些不太好的改动,Dash仍然很坚定的走着自己的路。现在VeryCD已经成为国内电驴下载的中心了,论坛的邀请也成了紧俏货,祝他们一路走好吧,还是那句话,电影还是要看的嘛。

Dash这个网名怎么起的不知道,但先来学习一下这个英文单词的含义吧:

dash / dAF; dAF/ n 1 [sing] ~ (for sth) sudden forward movement 突进; 猛冲: to make a dash for freedom, shelter 为获自由、 遮掩处而急奔 * We jumped into the car and made a dash for the ferry. 我们跳上汽车, 冲向码头. * Mother said lunch was ready and there was a mad dash for the table. 母亲说午饭做好了, 大家一下子都向饭桌奔去. 2 [C usu sing 通常作单数] (esp US) short race; sprint 短跑; 短距离赛跑: the 100-metres dash 100米赛跑. 3 [C esp sing 尤作单数] a ~ (of sth) small amount of sth added or mixed 少量搀和物或混合物: a dash of salt 少许盐 * red with a dash of blue 略为发蓝的红色 * The flag adds a dash of colour to the grey building. 那面旗子装点著灰秃秃的大楼. 4 [sing] ~ (of sth) (sound of) liquid striking or being thrown against sth 冲击或溅洒液体(的声音): the dash of waves on the rocks 波浪拍打岩石的声音 * A dash of water in his face will revive him. 向他脸上泼水能使他苏醒. 5 [C] horizontal stroke () used in writing, printing and Morse code 破折号(–). =>App 3 见附录3. 6 [U] ability to act vigorously; energy 活力; 冲劲儿; 精力; 干劲: an officer famous for his skill and dash 以干练和干劲闻名的官员. 7 [C] (infml 口) = dashboard. 8 (idm 习语) cut a `dash be exciting and stylish (in appearance or behaviour) (外表或举止)神气, 有气派, 帅: He really cuts a dash in his smart new uniform. 他穿著漂亮的新制服真是神气十足. make a bolt/dash/run for it => bolt2.

/ dAF; dAF/ v 1 [I, Ipr, Ip] move suddenly and quickly; rush 猛冲; 突进: I must dash (ie leave quickly), I’m late. 我得赶紧走了, 已经晚了. * He dashed off with the money. 他带著钱跑了. * She dashed into the shop. 她冲进商店里. * An ambulance dashed to the scene of the accident. 救护车风驰电掣赶往事故现场. 2 [Ipr, Tn.pr, Tn.p] (cause sth to) strike forcefully (使某物)猛撞, 撞击, 碰撞: Waves dashed against the harbour wall. 波浪撞击著港口的墙基. * He dashed the glass to the ground. 他把玻璃杯狠狠摔在地上. * The boat was dashed against the rocks. 小船猛撞在礁石上. * A passing car dashed mud all over us. 一辆汽车飞驰而过, 溅了我们满身泥. 3 (idm 习语) dash (it)! (infml euph 口, 婉) (used as a milder way of saying damn 用如damn一词, 语气稍轻): Dash it! I’ve broken my pen. 糟了! 我把钢笔弄断了. 4 dash/shatter sb’s hopes => hope. 5 (phr v) dash sth off write or draw sth quickly 匆匆地写或画某事物: She dashed off a letter to her mother. 她给母亲匆匆写了一封信.

==>确实符合勇往直前的作风,呵呵,其实说了这么一大堆,真正的目的只是为了把答案从第一屏上挤下去,翻页才能看见,下面再来学习一个单词,然后揭晓真相。

dashboard (also facia, fascia) n board or panel below the windscreen of a motor vehicle, carrying various instruments and controls (机动车辆的)仪表板. =>illus at App 1 见附录1之插图, page xii.

Fwolf's Blog > Dash 真相

呵呵,希望Dash不要劳累过度,在GFans里面也不要总是潜水。

Related posts

Categories: funny Tags:

搞IT的真不容易啊

October 20th, 2006 Fwolf 1 comment
Categories: Internet, funny Tags:

如何区分php脚本是在shell下运行还是在web上浏览

October 19th, 2006 Fwolf 3 comments

一般我们使用php是作web开发用的,但php也能够在shell下运行,就像bash、python脚本一样,方式一是通过php -r或php -f命令(nix和win下都可用),另一种方式是在php文件的前面加上“#! /usr/bin/php”,并chmod +x xxx.php。

虽然php程序在这两种情况下运行的结果基本一致,但还是有所区别的,首先他们使用不同的php.ini配置文件,这个以前就说过了;其次两种情形下输出信息的时候要略微不同,在cli方式下运行,输出信息的分行一般使用回车就够了,而在web下浏览的时候,还要多加上一个<br />;最后得到参数的方式不同,cli下可以直接取argv数组,而web下则要通过$_GET数组。

那么有什么方法让我的脚本自动判断是处于哪种运行模式下,从而选择不同的处理方法呢?通过对比cli和web方式下phpinfo()反馈信息的不同,我发现基本可以用环境变量$ENV[""]来判断,当采用php -f方式执行的时候,$ENV[""]的值是/usr/bin/php,即执行文件的名称,当设置了“#! /usr/bin/php”并运行xxx.php时,$ENV[""]的值是./xxx.php,也是执行文件的名称,最后在web方式下浏览的时候,$ENV[""]的值是/usr/sbin/apache2,即解析php文件并反馈信息的web服务器执行文件的名称。那么,基于这个环境变量的值,我们就可以判断出程序的运行模式,并选择不同的处理方法了。下面是一个简单例子的源代码(cli_web.php),输出结果为得到的所有命令行或者get参数。

#! /usr/bin/php
<?php
if ((‘/usr/bin/php’ == $_ENV["_"])    //php -r …
    
|| ($_SERVER["SCRIPT_FILENAME"] == $_ENV['_']))    //chmod +x xxx.php and run itself
    
$is_cli true;
else
    
$is_cli false;

//Set line break string and argument array
if ($is_cli)
{
    
$s_br “\n”;
    
$ar $_SERVER['argv'];
    unset(
$ar[0]);    //self-name of this script
}
else
{
    
$s_br “<br />\n”;
    
$ar $_GET;
}

$s implode($s_br$ar);
$s .= $s_br;
echo 
“Got arguments: $s_br$s”;
?>

上面的代码在cli模式下运行结果为:

$ ./cli_web.php a b c d Got arguments: a b c d

在web浏览方式下返回html代码为(访问形式为http://…../cli_web.php?a=1&b=2):

#! /usr/bin/php Got arguments: <br /> 1<br /> 2<br />

基本达到设计要求,只是web浏览方式下的“#! /usr/bin/php”不知怎么才能去掉,它不在<?php ?>包含范围内,无法使用ob_clean()清除,希望哪位路过的达人不吝赐教。

Related posts

Categories: PHP Tags: