2005-1-7 00:06
yhw
最近在学习linux程序设计,shell篇。有这样一个程序,说是检查特定用户登录情况,发出警告并传递至某文件的,如下:<br /><br />#!/bin/sh <br /><br />until who | grep "$1" > /dev/null <br />do<br /> sleep 60<br /> done <br /># now ring the bell and announce the expected user. <br /><br />echo e \\a <br />echo "**** $1 has just logged in ****" <br /><br />exit 0<br /><br />这本书的每个脚本都会作出比较详细的解释,偏偏这个程序什么都没说,所以一头雾水,根本就看不懂。因此向高手请教,此程序是怎么回事呀?<br /><br />先给我解释一下第一条语句的意思吧!until who | grep "$1" > /dev/null <br />who是什么东东,好象没学???
2005-1-7 11:26
seven
<!--QuoteBegin-yhw+2005-01-07 00:06:14--><div class='quotetop'>QUOTE(yhw @ 2005-01-07 00:06:14)</div><div class='quotemain'><!--QuoteEBegin-->最近在学习linux程序设计,shell篇。有这样一个程序,说是检查特定用户登录情况,发出警告并传递至某文件的,如下:<br /><br />#!/bin/sh <br /><br />until who | grep "$1" > /dev/null <span style='color:red'>//who显示当前登陆的用户,这里$1是shell脚本传进来的参数,也就是你要监控的那个用户,>/dev/null 查询的结果重定向到/dev/null,不显示,再until循环里,只有当条件为真时,才推出该循环,这里who | grep "$1"是until的判断条件。</span><br />do<br /> sleep 60 <span style='color:red'>//为什么要sleep?记住如果要监控的用户一直没有登陆,那该shell就一直死循环再这里,sleep 60降低系统资源的消耗</span><br /> done <br /># now ring the bell and announce the expected user. <br /><br />echo e \\a <span style='color:red'>//监控到了该用户,响铃</span><br />echo "**** $1 has just logged in ****" <span style='color:red'>//提示该用户已经loggin</span><br /><br />exit 0<br /><br />这本书的每个脚本都会作出比较详细的解释,偏偏这个程序什么都没说,所以一头雾水,根本就看不懂。因此向高手请教,此程序是怎么回事呀?<br /><br />先给我解释一下第一条语句的意思吧!until who | grep "$1" > /dev/null <br />who是什么东东,好象没学???<br />[right][snapback]428031[/snapback][/right]<br /><!--QuoteEnd--></div><!--QuoteEEnd--><br />
2005-1-7 12:37
无双
<!--emo&:rose:--><img src='style_emoticons/default/rose.gif' border='0' style='vertical-align:middle' alt='rose.gif' /><!--endemo--> <!--emo&:rose:--><img src='style_emoticons/default/rose.gif' border='0' style='vertical-align:middle' alt='rose.gif' /><!--endemo--> <!--emo&:rose:--><img src='style_emoticons/default/rose.gif' border='0' style='vertical-align:middle' alt='rose.gif' /><!--endemo-->
2005-1-7 18:55
yhw
先谢谢seven朋友的指点,容转到linux系统再细看。<br />谢谢!
2005-1-7 23:44
yhw
seven兄(M?):<br /><br />我很笨,还是没看得太懂,当然程序的逻辑还是马马虎虎地搞懂了,就是具体的细节。这当然得多调试。所以还要请教。<br /><br />我想做试验:<br />如果我想监控root用户(要是不行,就取yhw用户),这个程序应该怎么改,再怎样运行?<br /><br />我目前只知道把它改改属性,再./运行,但根本了解不到这程序的实用性。<br /><br />请指教,谢谢!
2005-1-10 09:55
seven
./脚本名 root<br /><br /><br />另:你还是没有好好看我给你的解释$1参数是怎么进来的???
2005-1-11 10:57
congrd
难得有象seven讲的如此详细的了<br />向seven 学习!!!
2005-1-11 22:58
yhw
<!--QuoteBegin-seven+2005-01-10 09:55:02--><div class='quotetop'>QUOTE(seven @ 2005-01-10 09:55:02)</div><div class='quotemain'><!--QuoteEBegin-->./脚本名 root<br />另:你还是没有好好看我给你的解释$1参数是怎么进来的???<br />[right][snapback]428707[/snapback][/right]<br /><!--QuoteEnd--></div><!--QuoteEEnd--><br />忏悔中。。。。。<br /><br />自责30杖,但如还有不明,只有认为是资质愚钝,不能再加指责 <!--emo&:(--><img src='style_emoticons/default/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo-->
2005-1-12 00:44
yhw
我不请教seven一下,为什么监控成功后,导入到/dev/null的结果看不到?<br />我用more,是不是应用其它命令?<br />谢谢!
2005-1-12 09:56
seven
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin--><span style='color:red'>who | grep "$1" > /dev/null //这里是做检索的过程输出重定向到/dev/null,/dev/null是一个特殊文件,你可以这里理解它,就是一个黑洞:),当你不想脚本的输出默认输出到stdout(系统标准输出,一般也就是主显示器),就可以重定向到/dev/null这里来!</span> <!--QuoteEnd--></div><!--QuoteEEnd--><br /><br />另:其实这个脚本是没有生成记录文件的的<br /><!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->echo e \\a <span style='color:red'>//监控到了该用户,响铃</span><br />echo "**** $1 has just logged in ****" <span style='color:red'>//看这里,仅仅是在标准输出上显示了下</span><!--QuoteEnd--></div><!--QuoteEEnd--><br /><br /><br />如果你要保存到记录文件同时还在标准输出上显示可以这样<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />echo "**** $1 has just logged in ****" | tee -a root_login_record //这里tee命令可以将标准输出重定向到文件和标准输出里,-a 表示文件内容追加,不覆盖<br /><br />如果效果更好点,你可以再在每天记录上加上时间,那样比较好点,用date命令的适当格式就可以,自己写吧!:)<br /><!--c2--></div><!--ec2--><br />
2005-1-12 18:29
yhw
只能说:太感谢了。百问不烦。<br />谢谢,再次感谢!
2005-5-12 09:15
foruok
hehe,太让人感动了.
2005-5-12 21:35
zdygk
随便找本unix的书,学习一下unix的常用命令和shell reference吧~这更有好处。<!--emo&:D--><img src='style_emoticons/default/laugh.gif' border='0' style='vertical-align:middle' alt='laugh.gif' /><!--endemo-->
2005-6-8 09:25
tututu
如果我要纪录每一个用户登陆的时间及纪录其相应的loginout时间,该怎么做呢?
2005-8-8 22:34
chauney
顶下seven兄,解说实在漂亮<!--emo&^_^--><img src='style_emoticons/default/happy.gif' border='0' style='vertical-align:middle' alt='happy.gif' /><!--endemo-->
2005-10-13 14:26
xyj889q1
hi~~~
hi
页:
[1]
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.