00:00
好了,那我们继续来学习编程进阶这部分。那在上午呢,我们给大家讲了这个for循环的第二种语法,那for循环相对来讲,这种循环写法它并不是特别适用于所有的场景。那有另外一种循环叫VR循环,这个循环它可以支持更为普遍的情况。Where也能实现循环啊,它的实现格式是这样的,Where加一个命令。那这个命令如果是成功,也就是返回的状态值到了转化时令啊,就执行循环体力的指令,那如果返回的是甲,那么这个循环就不执行了。那当然,如果为真的话,执行循环体之后,还要再翻回来,继续判断这个指令是否为真啊,也就意味着这个条件为针将不断的循环。
01:08
什么时候这个命令为甲了,将结束循环啊,当然我们很多时候会把它写成多行,那就变成这个样子了。那这个循环的。条件你可以写在这个where后面,加一个你希望作为判断的一个指令。所以这个条件就不像咱们刚才看到的for循环,For循环它的循环次数是由你事先写好的一个列表。啊,元素的个数决定循环啊,或者呢,拿一个算术运算。但是。那我们现在用where这种写法,这个命令也可以写非常。非常多的各种条件,非常丰富的条件都可以写在这个位置。
02:00
所以它相对来讲通用性更强。那我们用。这个外循环写法完全也可以把我们for循环的这些功能啊来进行实现,也都可以的。那外循环我们可以改成比方说我们之前说的那个什么加一加二加三加到100,你也可以用where循环来写,那怎么写呢?这么来写我们来看。啊,我们用where循环来实现啊,那么我先定一个初始值where,然后这个地方我们就加一个条件判断。啊,那么这个I也给他定一个初始值是一,这个I什么时候变成。100的时候我们就退出了啊,所以呢,我们就可以,哎,当然我们要判断一个变量是什么,大于多少等于多少,这个我们曾经说过,哎,一个方法,比方说我们用中括号。
03:07
写条件写在这比说Dollar a啊,我们也可以用小于等于100,小于等于100的时候呢,这个条件为针,我们就直行循环,当然如果大于100了就退出了啊,我们就可以在这加上一个萨加等。然后这个I做完以后,I要加加啊,I要加加啊要递增,然后最终呢,把这个散呢给它打印出来啊,这样就可以了。那这个就是一个where的写法啊,同样也实现了咱们之前的功能一样的。当然这个地方的条件那就可以非常丰富了,你想执行什么作为判断条件,你都可以放在这个地方啊,不仅是数字判断,包括各种判断都可以。
04:07
啊。那where,由于这个地方它可以加一个条件,只要这个是个命令,它返回的是真,就直接循环,假就结束循环。所以如果说我们在这儿可以加一个这样的一个条件,这个条件。大家想,如果这写了个处,这是什么意思?这是不是就是永远为真嘛,那这个醋本身就是针,它反回就是成功结果,所以这样的话就会造成这是一个死循环,无限循环啊,无限循环,当然那无限循环这个并不是一个我们真的希望的一个无限循环,我们可能将来会再加一些判断,决定什么时候结束这个循环,这也是可以的。
05:01
啊,所以我们在这个循环体里面也可以加一些指令,比方说我加一个条件判断,当什么什么条件满足的时候,我退出整个循环,或者退出整个脚本也都可以啊,也都可以啊,所以这就是V循环啊,所以我们前面给大家讲的这些呢,通通你都可以写成外循环。那你像这边它有这样的一个。判断就是判断一个网络中主机在这个网段里面到底哪些主机是在线或者不在线,当然这像这种的,你像这个网段192180,那192180,那这个网段假设24位的择外码的话,那我们是不是就可以取192180是固定的,最后这个数字从一一直循环到二五次,对吧?那就是判断254次循环,那当然你也可以用V2循环,写V循环无非就是在这个地方加一个。
06:00
A,比方说小于等于254,哎,这就可以了,就可以实现了啊,那你看这个是我们刚刚写过的,就是计算这个总和的也都可以。啊,另外呢,嗯,这可以来实现磁盘的空间判断,这个磁盘空间判断是干嘛呢?就是我们要想来判断磁盘空间,哪个磁盘分区满了,那我们就希望能够发邮件报警啊,比方说我们以前的话是找了那个最大值,只要最大值大于多少多少我就报警,现在我不是了,现在我是每个分区都去判断一下,那哪个分区大了,我都会加邮件,发邮件报警啊,比方说假设跟满了我报一次,Data满了也爆一次,Boot满了我就爆一次。那这时候我们要判断这个每一个分区的空间到底谁满了,那我们也可以用VR循环。当然这中间。
07:06
由于我们写好脚本以后,这个脚本具有通用性,所以我们并不知道,事先并不知道我这个硬盘可能有几个分区,因为不同的主机你那有三个分区,我这有五个分区,所以我也不知道有几个,所以我是不是没有办法写死了去循环几遍啊,所以那我们就怎么办呢?我就写个不断循环,什么时候结束了,啥时候算,哎,所以我就可以这样写,你看我这写了一个,你看这写了一个冒号。当然,这个冒号实际上什么意思?冒号和处是一个道理啊,这个死循环的写法,这个写法实际上你可以换成冒号。因为冒号和处都是一个道理,那我把它加在这个位置,这个可以写成冒号。哎,冒号的功能和处是一样的啊,在咱们这个文档帮助里面,你可以看一下冒号冒冒号什么就是空指令。
08:08
它总是返回一个什么成功结果啊,所以它和处实际上是功能一样,你看这个处它不是也是总是返回一个成功结果吗?啊,所以它永远为真的意思永远为真。啊,所以我们就可以写这样的一个死循环,那这个死循环大家看这是个死循环条件,然后接着又子。啊,这个D我们要取DVSD开头的。我们利用这个C的命令,把排在第一个的给它取出来,这是排在第一个的取出来,取出来以后,如果说这个空间啊,这是第一个是吧,Hi的N1,那取出第一个来,如果这个第一个利用率是大于报警值,这半值是80,那么我们就。
09:01
发邮件啊发邮件,当然这个地方呢,嗯,这个循环它没有一个分区,一个分区判断,它只判断最大值,那么这个判断最大值,我们只要判断第一个分,第一个分区只要有一个分区是最大的利用率超过80我就报警,但是呢,这个地方它加了一个SLEEP10,这是什么意思?就是这个脚本它将不断的去循环,每十秒是不是执行一次检查,是不是这就每十秒执行一次检啊,就相当于说我我这个我也不知道这个空间啥时候满,那我就不停的去检查,隔一段我就检查一次,隔一段时间检查一次。哎,这样的话呢,就可以来监控磁盘空间,当然我刚才说的那个也可以做到,比方说我们编一个再嵌入一个循环,再嵌入一个循环,我就去一个一个去找,找到一个循,找到一个分区大了,那我就给他报警也是可以的啊,当然我这个里面这没有这样写,我这个是只是找到它一个空间最大那个,最大那个呢,我们去判断它是不是大于80,大于80我们就报警,如果不大于80,我过一会再查。
10:07
啊,这个sleep就是起到这个作用。那这样的话呢,我们就可以不断的去实现。磁盘空间的检查啊,当然这个要发邮件的话,是不是还得编一个。邮件的。配置文件对吧?啊,邮件的配置文件,这个配置文件呢,我们可以放在加目录里面。有RC也可以放到放到哪记得吗?没有RC是不是放在这也行啊,两个地方都可以放啊,比如我就放在这吧,好,那这个放在这吧,这个这个这个。这个授权码对不对呀,没变过吧,因为这个是之前写的,不知道变没变。啊,这个这个是之前。咱们用过的啊,好像没变,那就是它了啊。
11:01
好,那这样的话呢,我们就可以来发邮件了,那发邮件的话呢,我们可以来试一试啊,可以来试一试没有。杠s hello啊,然后给我的邮箱发一个邮件。随便写一个。好,看我的手机QQ里面能不能收到。这个是之前的QQ邮箱。
12:05
我这QQ怎么收不着了。自己给自己发不行,之前发过。这不是的。呃呃,谁来报一个邮邮箱吗?来我这测一下,看我这怎么发不了29308620,那是对的。这个应该也是之前写的。写个邮箱看看,看看能不能收到啊,我就用赵振宇的吧。
13:03
能收到我看看啊。收到了,收到了是吧,那说明没问题,那我我刚才我这个邮箱怎么没那QQ没收到,是不是邮箱里面。行啊,那就说明可以的啊,可以,那这个邮件能发,能发的话呢,我现在就可以把这段脚本拿过来了。啊,这段脚本就是编了一个for循where循环来实现的where,啊,实现磁盘空间的检查。好,这个报警值呢,设了一个80,然后这编了一个死循环,那这个命令呢,咱们可以来看一下,它是不是能取出空间利用率来。看能取出来啊,你看我这个利用率是13,所以它能取出最大值来没有问题,然后取出来以后呢,就用这个来判断啊,如果。
14:08
利用率大于warning大于80,那我们就发邮件报警啊,这个地方还写了我的机器的IP地址啊,邮件提示啊,当然这个邮件要给我发了,我给咱们班里同学发吧。呃,点第二个同学丁令飞是吧,啊丁总啊,收一下邮件啊。这个是到这个。哎,怎么不能沾呀?换行了啊,这个没错吧。哎,你这QQ号长得还挺好看。
15:00
是吧,好,那当然我这个现在开始执行啊,开始执行它是个死循环啊,你看这个死循环它就一直在这执行,而每十秒去查一下磁盘空间啊,所以我现在呢,空间还没有满没有满啊,没有满呢,让他满一下也很简单啊,我就找这个空间比较小的这个boot boot满了,那是不是写一个大文件就满了。啊,这样啊,大家看到它总共也就不到一个G啊,那我写上一个800兆。200兆,这样的话他就满了。啊,大家看哟,100%了,满了是吧,满了那这个地方应该报警了。
16:00
啊,大家得等一下,最多会等十秒是吧。啊,收到了是吧,啊诶这这这这是谁这谁的呀,不是丁总的吗?发错邮箱了是吧。这是这是呃幺二。哎,你你俩是咋回事呢?他给你发的是你的邮箱啊,他把你的给贴过来了,哎呀啊,这是你的QQ啊,你把人家的发过来了,嗯,行,你俩关系挺好啊,我还说你俩共用一个QQ呢。啊,好基友是吧,啊,那说明我们这个邮件呢,确实成功了是吧,这不就很简单吗?这不就实现邮件报警了啊,当然这个东西真正的话,我们现在用的是个死循环,但是这个现在有个这样的问题啊,缺点在哪呢?就是我把这个窗口啪一关。
17:08
我这比方说人离开的时候,我是不是有可能就把这个窗口插了,我一窗口一插,那是不是这个程序就停了,对不对,所以这样的话呢,显而易见,这个程序不就不能持续进行下去了啊,所以这种方法并不是一个很好的方法啊,我们后面会给大家介绍还有别的方法,快关了,邮箱快满了是吧,发了几次呀。没多少次呀,十秒一次,十秒一次。啊,所以你实际上用这种方式,很显然咱们就可以实现一个垃圾邮件发送了是吧?啊,如果说你想把班里同学的邮箱撑满,那你这是不是就很简单了,你把邮箱撑满你都可以不用sleep了是吧,直接不停的发,写个死循环,得一会他邮箱真满了啊,你还可以带一个大邮件,大邮件正文是吧?嗯,别一会。
18:12
不过现在邮箱都大啊,以前的话,原来我们原来最早的时候免费邮箱空间很小,才五兆。五兆免费邮箱啊,那时候什么163的,那163还是最早那163.net呢,不是163.com最早的啊。L5兆邮箱,所以用这个编一个小循环,一会儿就了,一会儿空间就满了。好,这是刚才给大家说的,呃,另外呢,我们这儿可以看一看这个扫描网段,这个这样的一个事啊,扫描网段,这个扫描网段呢,嗯,看看这之前写过没有一个类似的脚本啊。妈。嗯。
19:01
啊,那扫描网段也可以用where,那我们从一到二三四一直扫描,那我们就可以来这么来实现where,实现一个网段的扫描啊,Sky post。啊,威尔,我们去从一一直循环到254啊,所以我这个网络先给它定义好,网络呢,假设是0.0.0。然后呢,我们是从一开始一直循环到254,那I的值呢,我就从一开始,然后这个地方我们去定义,我们用where循环,那么这个是AA的值呢,是小于等于254啊,小于等于254度啊,然后我们去P。拼拼的时候拼一次啊,然后拼这个什么呢?拼这个net这个网络加上一个点,然后I加上一个I加来的话呢,这是不是就将来就是10.0.01234,让它将来涨,然后拼通拼不通我们都不去看啊,当然如果拼通了,那我就打一句话说此主机。
20:24
是up的,那如果拼不通,那就打一句话说此主机当了。啊,这样的话呢,很简单,一段小脚本就出来了啊,当然这个I呢,我们还要去让它。加加是吧,哎,加加这样的话呢,我们就循环了254次,好看看有没有问题,没有问题,那我们就来执行一下看看效果。
21:00
干。这就是个循环,当然我们数字循环一般来讲建议用for比较直观,虽然where也能做,但是呢,显而易见,写成for是不是应该更好看,对吧?啊,所以相信大家啊,知道循环有多种写法,那么你选一个比较适合的更好的,像这个呢,用for循环写还是更好一些。啊,所以你可以用for循环的第二种语法来写,但这个好像有点慢,因为这个254台机器,它按它这个进度是一秒一次,基本上一秒一次,光把这个254扫一次,那就好几分钟,五分钟对吧,五分钟这个速度是比较慢的,所以我们后面会给大家讲这个怎么就更快一些,就是可以更快一些。啊好,这是咱们执行的V2循环,那么当然V2循环呢,我们还可以来实现。
22:02
来实现其他的循环方法,那就是on until循环。on until循环说的也是循环,不过呢,它的这个写法是这样的,这个和外循环实际上两个人相反,On until循环它是这个命令如果为真,反而就不执行循环了,它是为甲的时候才执行循环,所以实际上它和威尔的功能一样,无非就是取个反而已。取个反啊,所以呢,这个命令为真,On until是直到的意思是吧?那么on until是直到,那直到什么直到这个命令为真了,好了,就结束了啊,那么V假阿反二要直径循环,所以呢,如果你要用where尔写,那么on until这给它取反就行了啊,你换成o until,那一取反就可以了。啊,所以呢,如果我刚才这段代码中你想用until写,那也很简单,那你怎么写就行了。
23:02
啊,比方说我们刚才这个,呃,磁盘也好,或者是他是刚才写的这个这个呃扫描网段也好,那这个你反过来就行了,那这是不是一区反写的叹号,把它换成on q就行了。啊,就取反就行了啊,因为他俩基本上一样,所以onto呢,基本上怎么说呢,大部分人都不太用,用的很少啊,甚至有人从来就不用on。因为他逻辑上跟威尔实际上一样,无非取个反而已。啊,所以呢,如果你要用until实现这个所谓的死循环,那也行,Until要想实现死循环,On until的死循环怎么写啊?Until那就是false,因为维甲它是永远执行。对吧,啊,所以呢,我们这个地方度。然后你比方说我们这行一个。
24:01
我写错了吧,这儿。大。Horse。啊,单词没写错吧,啊好,然后执行,当然这个因为中间还得修,稍微停一下啊,要不太快了。好,我这给他加一个呃,力一秒。啊,你看这就是个死循环,他一直在这执行,一直在执行啊。好,那么CTRLC呢,把它停了。那这边折腾好长时间了,还没来,也比较慢比较慢。
25:00
好了,这是刚才给大家讲的这个循环的三种啊,这三种呢,大家重点掌握两种就可以,一个是for,一个是where。Onto呢,因为它和on可以互换啊,互换,所以这个你看也行。啊,或者不用看也可以,那么另外呢,我们在循环执行的时候,有的时候我们可能会打断循环。啊,一种是。Continue,一种是break。这是两种不同的打断。那么这个循环它的打断,所谓的continue打断,说的就是我在循环执行的过程中。在循环体内部,它可能会有多个指令,比方说我这个循环体里面有COMMAND1 command2 command3,有command n等等。那么这个一旦有了一个continue以后,这个continue条件一旦执行,一看执行continue了,那么后面的这个循环体的内容将不再执行了。
26:05
也就是说这次循环就提前结束了,正格正常的话呢,我们这是不是应该有一大串要执行的指令,对吧,现在我们看到肯定相当于后面的指令就不执行了,但是这次循环虽然提前结束了,但是下次循环还是要该执行执行的。也就是说,只是结束了本次循环,提前结束了本次本轮循环。啊,比方说大家来上课,来上课的话呢,哎,正常应该从早上一直上到晚上下课。这每天都这样循环。但是结果上到上午的时候,中午想吃,吃完饭,结果发现,哎呀身体不舒服了,身体不舒服了,下午没法上课了,坚持不住了,就提前结束今天的课程,回去休息了,那回去休息了,那但是休息一晚上,第二天身体又好了,是不是第二天该上课上课,那这个就是continue。
27:11
那就是今天的循环,咱不做了,今天从早上到晚上的这个课程我没上完,上了一半,这叫continue啊,但是第二天我该上课还是上课。当然这个是第一种continue,那么还有另外一个叫break,那这个break说的什么意思呢?Break说的就是整个循环就全结束了。整个循环就全结束了,那整个循环结束了,比方说。哎,中午的时候,当然他不是说吃的吃的不好了是吧,这个是突然家里来电话了啊,说家里拆迁了,哎,这个这个。所以决定不用再上课了,所以他就提前结束了,咱们整个课程打包回家是吧,哎,家里什么都有了,有房有车啊,媳妇都准备好了,直接就结婚了啊,那这样的话呢,这个循环就整个结束了,那这就是break是吧,Break,所以这两种不同的逻辑啊,两种不同的逻辑。
28:19
啊,那现在可以看一下这个它的比较啊比较。那我们这边。看这个条件。这个我把这个代码复制过来,来看一下它实现的效果,Continue。好,那么这个continue,大家看这条代码,你观察一下它最终实现的逻辑是什么意思啊,大家看一下能不能判断出来。
29:05
这是两套两层循环。这两层循环。最外层的循环是I,从零一直循环到九,也就是循环十次,然后里面又套了一层循环这个J,这个J呢,也是循环零到94,然后这个J如果等于五就continue,不过这个continue呢,它后面跟了个数字。这个数字什么意思呢?是这样的,我们这个循环它有两层,那么这个二代表着它退出的不是本层,而是外层的循环,默认写的这个是相当于一就是喷,退出的是本层循环,但是我也可以一下子退出外轮的这个外层循环。当然我们先说一下一的问题情况,一实际上你不用写就是一。啊,那如果是这样,那就意味着他就把当前这个for这一层循环看到五的时候就退出了,那退出了那是不是这个就不执行了。
30:10
那不执行了,但是下一轮循环执行不执行啊执行,那所以大家能想到什么意思吗。上我1234512波。1234。那后面那个五还会打印吗?那六打不打,六不打吗?六咋不打嘞,六接着打呀,就五不打了,我们说结束本轮循环,我可没说结束整个循环,那也就是说这个五不打了,五这个就不打了,但是下一轮六是不是该打打呀?对吧,哎,这就是你看每次0123456这个舞就跳过了,哎一直循环。
31:00
每次都这样,那接着我们把它改一下,改成二二呢,它退出的并不是。这这这层,而是外层外层的循环,那外层循环退出以后,这个是不是就不打了,这横线你看它这个循环之间是不是有个横线是吧,那这个横线它就不打了,那横线不打了,那是不是意味着我这0123456啊,012345的时候肯定有二,那么是不是这个相当于我们一段都跳到外层去了,这一层是不是自然就结束了。啊,但是呢,这个又不打了。那就是每次01234012340123401234。是不是这意思?啊,那我们来看看是不是真的量啊。看是不是01234那个横线就不打了。到了四五就不打了,因为他退到外轮去了。
32:01
外轮又从零开始,61201234610234啊,这就是。Continue。当然,咱们也可以把它变成break。好,我们把它变成,那变成break以后,那我们看看最终你猜猜效果是什么。啊,如果先写个break,它也支持BREAK1BREAK2默认就是一。那你能想出来break现在是相当于BREAK1,这是啥意思?最终效果是什么意思?Break是整个循环就结束了。但是是不是看到我这个循环就结束了,但这个循环结束了,这个要不要打要打,所以他01234 01234,就是01234横线,01234横线,01234横线,那就打十遍01234横线是不是啊,那我们来看看是不是这样的效果啊。
33:11
啊,那当然,那现在我们同样也可以把它推到两层,那这个两层的话退到外层去了,而且外层整个也结束了。那是不是意思?你能想到什么意思吗?啊,最终是什么效果,对,就是刚进来的时候,I等于零,然后进来了,然后这循环到01234的时候,哎,看到我就退出BREAK2 break2呢,整个Y轮循环就结束了,Y轮循环结束了,那整个循环整个程序也就结束了,所以他就只打到01234。嗯,横线也不会打印是吧,啊1234。
34:02
啊,当然如果说你实在是想不清楚,那你不行跟踪一下,跟踪是吧,加上X,你看他咋执行的,一步一步的,你看看琢磨琢磨啊,如果想不明白,你就看这个X,他会告诉你他一步一步怎么来的。对吧。啊,这是break。啊。好,那这是刚才给大家说的这个。执行执行过程。好,那我们可以利用刚才给大家讲的这些来实现菜单功能,比方说让你实现点菜功能。
35:05
点菜啊,中午你们吃什么,你们都可以来做个菜单,比如说你看我这准备了几个菜单啊。是吧,这都是比较。比较有名的菜呀,是吧,这个鲍鱼是吧,龙虾什么帝王蟹,嗯,燕窝这个大家都吃过不,满汉前席我也没吃过啊,别的别的应该可能吃过满汉前席没吃过,那这个可以通过循环。那就外循环,这是一个死循环,这个死循环里面呢,我们这打印了一个颜色啊,这个颜色是33,然后这边去实现菜单,把这菜单打出来以后呢,我就等着read,等什么,等着用户选吧,当你选什么菜单,是不是把这个价格打出来,比方说一和四,一和四是谁呢?就是鲍鱼和燕窝。
36:13
一和四价格十美金,注意Dollar美金美金。然后接着我们把你点的菜的价格累积起来。加起来。加起来以后,然后你再点,它是个死循环,所以它就会不断的让你点菜,那比方说我们又点了一个,如果点三和五。这个三个五,那么价格是20美金。哎,不断的去执行,那么如果是选的是六六的话呢,就点菜结束了啊,就退出了。点菜结束。是吧,结账结账退出啊好,那现在呢,我们来看看这个效果啊,最终是啥样的。
37:09
Menu。啊。好看一下这段代码啊,前面呢是做出一个菜单来。后面呢,就不断的去提醒用户去输入。然后这是个死循环,但是有退出的时候,什么时候退出啊,就是当你是六的时候,是不是就是break了。Break,那是不是一个循环就结束了?循环结束。好,那我们来走一遍看点吧,想吃什么?没吃过这个满汉全席呀,怎么先点一下哎,现在的价格,哎哟,这个满汉全席还挺贵。这个美金啊,不到1000块人民币啊,呃,1万块人民币啊。
38:07
不知道满汉全席没吃过多少钱,1万块钱够吗?估计够呛吧,这一桌子菜不知道多少菜。这买房前期不是一个人吃的,是不是应该是好多人一块吃的,那再点一个吧,你们想吃啥帝王蟹是吧?哎,你看加起来了,是不是现在价格涨了。现在哎,再点一个。你看点了100块钱的菜了,已经啊,我们都吃一遍吧,啊都吃一遍,总之我都给他点上了,点上以后呢,这个差不多了,那我们就结账了,六是不是要结账退出了。看这是总价格知道吧。当然我现在是用这个点菜的方式,那你将来是不是可以把你工作中的各种运维工作用菜单方式实现,比方说选一哎是不是做备份,选二是什么?整理清理数据,清理日志是吧?选三是啥啥啥,那你不就自己把脚本写进去不就行了吗?啊将来上了班是不是就点菜就行了,每天来一二三点个菜,你看你一天活干完了啊,多开心。
39:29
说了。啊,所以这样的话呢,这个就让咱们啊,这个上班的话感觉就比较愉快一些了。按你说每天上班好多重复的活,你就可以用脚本来实现啊。当然咱们后面还会学好多东西,那等你学的东西越多,咱们这个处理处理工作的能力就越强,就越来越方便。当然这个真正的最方便就是全自动化了,我们都不用去点菜单了,第二,呃,让让计算机能不能自动完成该多好,当然真要到那一步的话也麻烦了,你可以下岗了是吧?那老板说了,用不着你啊,用不着你。
40:17
啊,那这个呢,也是一个循环的小例子啊,你看这个循环的小例子干嘛呢,就是猜猜字游戏。啊,请你猜,哎,这个猜零到九的某个数,猜对了那就退出,猜对了就break了,猜错了那我就提醒你说数字多大多小,你看这个就是一个循环。这是一个生成了一个随机数字,这个随机数字呢是对时取模。大家都知道对十取模,取来的值应该是在零到九之间吧,零到九之间,所以让你猜这个数字啊盖。
41:04
啊,你看看看猜吧,请输入零到九的,那我们猜个五吧。数字太大了。那太大了,那是不是应该就是五以内的数字,那猜个什么。二呀,一下猜对了,竟然猜对了。那这就是猜谜是吧,是不是很简单啊,那这段代码你看很简单,这就实现了。哎,中间就用到了F提前退出。否则他就不会不断的去让你输入,那你看注意这个地方很有意思啊,我们把瑞的这个指令给放到where里去了,那这个是不是就是不断的会提醒你输东西对吧,不断的提示你输东西。
42:04
啊。那接下来咱们来看一下循环里面的。呃,另外一个配合循环的指令叫shift。这个shift的指令是干嘛的呢?Shift的指令是干这个的,就是我们在有的时候啊写脚本,脚本呢,它带的参数个数是并不确定有几个的啊,将来我们可能写了一个脚本,这个脚本后面呢跟了参数。有的人可能会加一个,有的人加两个,有人加三个。那这个加的东西个数还不确定。那加的个数不确定,这时候就会带来一个问题,我们将来怎么去把这个后面的参数一个一个读出来做处理呢?那我们可以采用这种方式,先判断一下参数个数有几个。参数个数有一个变量是可以告诉我们的,哪个来着,是不是Dollar井号,Dollar井号是可以显示出参数个数的,比方说Dollar井号判断出来是十个,那说明用户是不是在这出了十个参数。那我就从。
43:14
一到了一,一直循环到十,是不是就把它都一个一个找出来了,那如果到了井号返回的是20个,那他就说明它有20个参数,那我就从。零啊,从一循环的到了20。但这个写法呢?相对来讲不太方便。那有一个方法比较方便的来处理参数个数不统一的情况,那什么呢?就是shift shift的这个指令的作用呢,就是每次能够让我们不需要去关心。参数到底有几个,因为我们处理的时候,我们只处理第一个。
44:00
只处理第一个。啊,这是一个。这是一个大楼,那这个大楼呢,上面站了很多人。啊,这个股票一不好的时候,经常有人跳楼是吧?哎,上天台排队排队往下跳啊,那这个呢,就是那个一号排队的人,二号三号,这就相当于参数嘛,啊这是参数。这参数,那现在第一个人肯定是先跳,那这个shift的作用呢,就是执行一下shift的好,他就跳下去了。它就没了啊没了,那那这个就往前走。就往前走一位,那往前走一位,那大家想它是不是就变成一了,它就变成一了。
45:00
哎,那实际上呢,最终它就变成了一,这是新的一,这个就新的二,这就新的三,哎。这就是shift的作用,Shift呢就是shift就是相当于把一个人踢下去了,那后面的人就顶替他上来,哎,如果你再执行一下shift,诶,他又没了。哎,那这个执行完了以后,他没了,那二往前走,三往上走,那最终就变成这个样子了,明白吧,那每次执行shift,后面的人往前走一步,前面的人没了,当然他也可以支持什么呢?也可以支持一下的shift两次。啊,比方说如果我这是1234,如果SHIFT2 shift有后面可以跟数字,就是我可以执行一个命令,叫SHIFT2,如果你执行谁不到,那就相当一下跳俩,这俩都没了。明白吧,这俩是不是就上去了。那这个当然它编号自然这个就变成一,这个就变成二了,意思了吗?啊,这就是shift的作用,那么由于我们这样shift完了以后呢,那么这个到一。
46:09
比方说我每次都执行一次SHIFT1 shift1啊,这个SHIFT1和shift是一样的,那么这意味着它这个参数它就会不断的出现一个新的DO1,那所以我们在程序里面将来是不是只处理DO1就好了。对吧,什么时候到二一没有值了,那不也就处理完了吗。而这就是shift的。逻辑啊,所以那么怎么实现呢?啊,比方说。假设我们想实现一个文件的。呃,这个处理啊,例如我就想啊,来根据用户在后面写的这个用户,比方说我想创建一个用户名,批量创建用户脚本,这个脚本后面跟用户名,比方说用户呢跟三个,那我就把三个建用户创建出来,他跟一个我就创一个,跟四个我就创建四个,那这时候我们就可以用刚才说的这个shift配合循环来实现,那比方说你跟ABC,那我就创建ABC这三个账号。
47:15
啊,如果你出现你只跟一个A,我就创建一个账号啊,那么怎么写这个脚本呢?那我们是不是就可以这么来写,就是我们先判断是不是为空,那就是到一为为空,DOLLAR1为空,那是不是我们就相当于循环就结束了,就没有判断DOLLAR1为空,那是不是就相当于我们就没有什么账号可创建。对吧?哎,那么一判断一个DOLLAR1为空,那这个用什么方式来判断呀,判断一个字符串为空,怎么判断呀,是不是直接写那个变量就可以了,那我们这是不是有一个判断,你看这个是不为空,然后这个是为空,那你看这个如果你直接写这个字符串就是不为空为真啊,不为空为真,那不为空为真,我们在里面判断才需要执行循环啊,才需要创建账号,那如果被空我们就退出了,就结束了,所以我们是不是直接这个地方写一个DOLLAR1就好了。
48:26
大家看是不是这意思?这是不是就是如果到了一为空,那这个是不是就结束了。那不为空,它是真嘛,不为嗔,那不为空为真,好,那我说明后台跟东西了,我是不是就把这个字符串当成用户名给它创建出来啊,所以我们这是不是就可以do,那怎么做呢?User and dollar1是不就行了,是不是就创建出来了吗?那创建完了以后呢,我们当然我们还得提醒一下,说这个用户创建成功了,Is create创建成功了啊,同时是不是执行完了,我们是不是给他shift一下,Shift完了以后,那原来的DOLLAR2不就变成DOLLAR1了吗?是不是再次进行循环就行了,这样的话,一个一个的,我是不是把账号就给它创建完了。
49:16
对不对,哎。啊,你看我们现在执行一下看看效果。啊,比方说我们后面跟ABC3个账号。你看创建完了啊,看看是不是创建出来了。看了吗?哎,这不就是这样的逻辑吗?当然你要啥也没跟,那他他就不会执行了呗,直接就结束了嘛。因为上来到一就是空空的话,是不是循环体就不执行了,现在。看明白了吗?哎,这脚本是不是很容易理解呀?舍不得啊,舍不得。
50:00
这个尤其你处理文件的时候。处理文件的时候,比方说有多个文件,你也不知道他跟几个文件,那你就可以用这种方式,哎,有一个我就处理一个,有俩我就shift,这么循环两次,处理两次就行了。好,这就是shift的指令。啊,这个是批量创新用户,哎,这是我刚才写的这个,当然他如果上来就是空,上来是空的话,我直接给加一个提示,你看这个是我加了一个提示,说什么你的用法至少得后面跟用户名啊,你不能上来就是空,上来空啥也不干啊,就是可以加一个提示完,让用户不至于什么也没输。当然这样呢,我就更详细了,这个就是万一这个用户已经存在了,我是不是直接打印就存在了。
51:00
那这个就是写的更完善一些啊,这个就更好一些,那我这个要想考虑的要更周全一点。啊,你看我们这样写完以后,现在我去执行,如果什么也不说,你看他就提醒我们了,所以你这个写法写错了,你应该是这么写,后面要加用户名的,对吧?加用户名啊,当然如果说我加了一个已经存在的用户,这都已经存在了啊,当然也有一些不存在的用户,你看。看到没?是不是看起来就更直观呀,对不对,但是你这个脚本要写的好一些的话,你得考虑各种情况啊,这个有的时候系统中不一定你想象那样那么顺利,可能会有各种情况发生。好,这是刚才给大家讲的这个,那下面这些呢,你们下来可以自己去实现啊,就当练习了,好,那么在循环中有一个非常常用的写法,就是where和read的组合,实际上这个刚才我们用过where read。
52:18
Where瑞的啊,你看刚才我们在前面写过一个猜字谜的这个,这就where瑞的组合。这个where read,它有什么好处呢?是这样的啊,Where read是这样的。咱们之前呢,曾经给大家说过一个写法,就是比方说A。然后read。比方说A,呃。Hello,大家记得这个命令最终的效果是什么?这命令的效果是什么?
53:06
现在这个A的变量里面有没有值?有没有啊,那我们都知道read本身是不是就是读取变量内容的,比方说hello,那你看那我们这儿有没有内容。那它是读取键盘输入对变量赋值,那所以我们就用标标准输入重定向管道,这是不是也可以啊,那现在这个B里面有没有值啊。密是多少?是不是也是hello?看来忘了吗?为什么这样,那我们就开了个子share,这个share所以就没有了啊,所以我们当初说了,那你要想看怎么看呀,你这么看放在一起这就可以了吧。
54:03
那这个可以是不是。这不都说强调过的,这是面试题吗?对吧?那当然,我们现在今天换了一个新的写法,就是什么呢?Where read。啊,会换个c do e Dollar c,大家看也可以。哎,换个新写吧。那这个写法它能够对这个变量不断的用这个值来进行赋值。而且呢,你复制几次,它就循环几遍,比方说我们在这加个N啊HELLO2再加个N3啊,当然这个要换行。是不是得加杠一呀?看明白了吗?
55:01
那这个就起到一个什么效果呢?就是记住记住下面的这几个字四个字吧,哪四个字呢,着行处理。着行处理以后,你记住了,将来如果我们希望对某某某资源着行处理,在脚本里面你就想起了where read where read就是擅长于着行处理的。啊,我们用这种方式把每一行的值赋给了这个变量,将来你在循环体里面是不是就可以处理这一行了?这是行处理。那比如我们刚才曾经想实现的事儿,就是那个磁盘空间分区的检查,刚才我们是只找出最大分区大于80我就报警,现在不是了。现在是我要着行处理着行什么呢?找到任何一个分区大于80我就报警。
56:04
啊,不是说光一个报警,任何一个满了我就报警,那这时候我们就可以用where read来实现。那现在我要判断每个分区。的分区利用率,并且我还要取出设备的名称,包括它的利用率,这两个值都取出来,将来判断一下这个值,如果大于80,那我就把这个设备的名称。以及利用率当前的大小。发邮件报警。而不是简单的说满了满了,那谁满了,你们说呀,对不对,哎,所以我们可以更为详细一点,那么这时候我们是不是就要一行一行的去取,取出这一行来,看看他数字大于80不大于80,就把这个和。利用率取出来报警,那如果这个没事,那我们就接着看下一个着行总行处理啊。
57:03
那么这个要想实现,那首先咱们得想到怎么把这一行的这两个东西,因为我们只要这两个东西啊,别的都不要。啊,那这两个东西取出来,中间这些我不关心,那这个又用到了我们前面讲的set可以取了,Set怎么把这两个取出来呀。那现在请问大家用set取吧,先把这个取完了再说,取完了我们再想怎么写,写那个where啊。刚才取过了,不过刚才取的时候只是取了一个分区的利用率,好像没有取这个。你们发邮件报警的时候,呃,没说哪个分区满对吧,所以刚才那个取啊,我们刚才写的那个只是说满了,但是没说谁满,你看这个呢,是不是只是说取出这个分区利用率了这个数字了。那这个是只取分区利用率,没有取出谁。
58:04
到底是哪个哪个分区。所以这个是不要不符合要求的。那所以咱们再改改吧,那我们还要取什么呢?取这个设备名,我要取出来。啊,设备面取出来。那这个怎么取啊?看这个格式能看懂吗?这什么意思啊?这是不是正则表达式,这是以DVST开头的吧,这是那D开头的,这不就是把这三行就找到了嘛,其他行我不关心嘛啊然后呢,我们现在要取的不仅是这个数字,还要要这个设备,那这个设备应该在最前面吧,是不是行首,然后是啥?那就是非空的字符是吧,飞空的字符点心,然后这儿有个空格数字,然后呢,我把这两个呢,就是加号一个以上,然后做一个分组,这是不是俩分组了,这就哎这一个数字一个分组,这一个分组是不是俩数分组,俩分组,那我们留一留二是不是就取出来了。
59:22
对吧。完了吗?似乎很好理解的样子吧,好理解吗?看到没有,分了俩组,分了两组,这不是就是赛的突出优势在这啊,你想取哪块取哪块啊,你想多分几个组就行了嘛啊。那不就是分区利用率和分区名称取出来了,取出来以后这是第一步,我们还要用where read,一个叫disc,一个叫柚子,把它分别附到两个变量里,Do,然后打印,然后说disc是Dollar disc。
60:13
然后另外一个。另外一个叫柚子,就是空间利用率Dollar,柚子好看,能不能打出来?没问题吧?这不都打出来了吗?那打出来了,那接下来要判断,那不就是水到渠成的事了吗?怎么办呀?第四下一个好,这个呢,我们用where循环,VV的循环来实现磁盘检查。把刚才那个代码。一天。
61:07
好,接下来以后度好,那接着我们就对这个右字进行判断了,是吧。啊,这个柚子啊,如果柚子当然我们前面加个报警值,这warning啊,这个warning咱们因为没那么大啊,所以我就弄小一点,因为我这个空间。呃,比方说有这这还有三一的呀,这个得了,只要大于二我就报警了啊啊大于二啊,这个我就意思一下,大于二就报警,那是不是我们就会报两次。因为我这有两个嘛,一个是100%的,一个是是不是三这个超了就报两次,报两次啊,那么这个判断什么Dollar是不是use呀啊,这个Dollar use。到这柚子什么,如果利用率大于warning。
62:06
大窝。好,然后度。大于,咱们就发邮件说这个磁盘空间怎么样了?满了啊,Will before啊,柚子已经达到多少了?已经使用了这么多了是吧,然后是不是给他发邮件啊,对吧,啊,比方说迪斯科报警。For。啊。来,还有谁的邮箱?嗯,子霞,子翔邮箱你是你的邮箱吗?不是用别人邮箱吗?
63:06
啊,这还没复制过来。怎么没复制全呢?前面少了一个9709,少了一个九是吧,970707452。好给紫霞发了啊,然后当然这个要没满那就算了。这满了就满了,就报警,没有就算了,Fi是不是就结束了这个。对吧,当然这样的话呢,我们就会循环很多遍啊,当然这个是一次性的啊,这是一次性的啊,一次性执行完就完了,当然如果说你想将来不停的进行循环,你是不是也可以再加一个处啊,哎,再加一个处,比方说休眠十秒报一次。
64:18
是不是,哎十秒,当然这个呢,嗯,缩记一下看见吧,这样的话是不是每十秒咱们就整个硬盘每个分区扫一次。发现有大的,不管哪个分区就报警。哎。这样的话就实现了。啊,看看这个代码有没有错呀。磁盘满了,利用率是多大多大。好,那我们就来试一试吧,啊,应该就发出去,这现在应该马上就发两封邮件。
65:04
应该是。两个分区满了。十秒一次啊,所以你那儿一会儿就会收到好多信。已经,哎呦收到了是吧,还挺快,诶你诶你看你你现在是一个分区啊,还有第二个,第二个也有了,你看没,大家看到了吗?SD1满了100%,SD2是3%,看到没满了吗?哎,这不就成了吗?哎看视频录下来的,这让别人看。买了。啊。这就实现了。啊,CTRLC停了啊,那这样的话,你看咱们用的这个逐行处理就实现了。
66:04
好,这是咱们以后where,那where read呢,这种写法,还有一种写法就是。这个where呢,前面是个命令,那有的时候我们可能想实现一个功能,就是逐个文件处理。逐个文件处理。那逐个文件处理的每一行单行一行一行处理,那这时候我们就需要。用另外一种写法,就是把这个地方的where read配合文件的重定向。文件的重定向。啊,怎么写呢?这样写,Where中间加一个条件do down,啊中间是你的循环体,然后do档,诶,然后这后面跟上文件。
67:06
那这种写法的效果呢,就是对这个文件读一行。然后执行循环,处理完以后接着读第二行,也是中行处理的意思。啊,也是着行处理的意思,比方说我们就用它来实现什么呢?就是创建用户账号,比方说我现在手上拿到咱们班里的所有人的学生名单。啊,这个学生名单。这么写的啊,写了咱们班的同学的信息。啊,我看看这一号是谁呀。啊,这人比方说一号叫王银奎是吧,王王银奎哎。第二个是。
68:00
杨,杨雄斌是吧,杨雄斌,哎,那么我一个一个的把他们写进去啊,比方说段明广,哎,我就写上几个意思一下,那就是一行一个用户嘛,那现在咱们来了这么多学生,那有些企业里面要开账号啊。开邮箱也好,开什么企业里面内部的邮件,那个用户账户也好,对不对,开账号啊,你开账号是不是得一个一个件,太麻烦了,那我们就要写到一个文件里啪,批量一执行就全给它创建完了啊,什么歌哪哪少了个歌段明广啊少了一个啊,不好意思啊,但就是写成段名官了是吧?啊光顾说话了啊,看着少打了一个字母,感觉好别扭哈。
69:02
好,那那我们就把这几个人写在这了啊,这是三个代表,我们就不写别人了啊,有三个人做代表就好了,而实际上生成这种文件很简单,Excel里面夸就生成了,是不是,所以这个文件很简单,那现在呢,我们就想把这三个人,你像企业里面要开这个给用户开账号啊,开什么信息啊,那我就有这样的一个文件了,那要把他们批量创建出来,也可以用刚才写的这个写法,比方说我们再创建一个新账号,叫great啊,叫batch,叫批量创建用户,批量的创建用户,那批量创建用户呢,我们就可以用这样写啊,Where to啊,Where read,然后name啊,小写吧,Name do done,后面跟上name test。这就完了,然后用user and Dollar name不就完了吗?当然创建成功,我这就直接打一句话说这个name已经创建出来了,那至于什么改密码我就不写了,大家知道这个意思,那这不也可以吗?啊,大家看现在我们把这三个人看能不能用这种方法批量的创建出来啊,我们走一遍看见没?
70:33
看吧。是不是,那将来无非就是你将来企业里面你去呃去配置的时候,无非就是把这段代码替换成你将来干的活不就完了吗。对吧。啊,你像你企业里面开邮箱或者是开账号,你把它替了一下就行了。那这个很简单啊,中行处理银行处理。
71:00
那甚至你可以,甚至把密码都可以写在里面,比方说我们现在如果想把用户创创建的同时们每个人设不一样的密码,那这个怎么弄啊,我们这是不是来个空格,比方说这个人设的密码是马哥edo,这个设的是乌邦库,这是不是我就可以用这种方式来设密码,那这样做的话,我们现在把刚才那东西再改一改,那这应该怎么设呢?这是不是应该两个字段呀,是不是一个pass呀,啊这样设完以后,光把账号创建完不行,我们还得设密码,设密码呢,就是pass,然后s w d din。然后是后面跟上那个内,这不就密码就创建完了吗?啊,把它垃圾箱扔进去,这样的密码不就创建完了,就连创建账号带密码不一块就干了,对吧?啊,当然我这三个账号已经有了,所以我先删了。
72:14
三账号。两删账号我们是不是也可以用cos,诶我不是cos是内啊内这个删账号怎么删呢?我们用这个吧,啊这能不能删啊,是不是也可以删啊啊当然我这因为里面有密码啊。因为有密码,所以他删不了,删不了。那我加上了。那这还得取一下呗,啊,再取一下,再看一下空格作为空格符,取他的第一列已经删了是吧?啊已经删了啊删了那就行了。
73:11
删了是吧,删了以后你看我们刚才写的这个代码。这把密码也加上了,那看看他密码能不能生成。好,那现在我去登录一下,比如说王。然后这个王银奎的密码是S是吧,那我就登录一下王银奎。密码渗透S来登录去了,那可以是不是这密码成功了啊,这就是咱们给大家实现的批量的创建用户,那将来你们要涉及到批量的实现一些账户的处理,那就可以用这个,那记住了着行处理,你记住着行处理就行了,想到着行处理就是where read。
74:07
对吧,着行处理也就这个关键字。外瑞。啊,这是磁盘检查的,这是检查黑客,黑客攻击的。啊,这个黑客攻击这个是干嘛呢,这有一个叫last b。这个last b呢,它是这样的。我们发现,如果发现你的企业里面有失败登录的情况发生。失败登录的情况超过一定的值,那我就认为是一种恶意的攻击。比方说我这。曾经有这样的一个。文件,这个文件记录的就是互联网上,咱们有些同学在自己的电脑上被别人恶意猜口令。
75:04
它生成的这样的一个文件,这个文件呢,嗯。大家看这个文件有多大,100多兆。就是黑客呀,他会猜你的口令,远程的去猜你的那个入的口令,用SSH连接。你看这个文件好大。他每次猜就会把它记录下来,记录下来以后呢,我们现在就可以把它拿进来,看看他到底猜了我哪些口令,而且呢,还能看到他们是从哪个机器。发起连接的。啊,这个命令是可以看到的,那如果发现有一个人猜测的次数过多,比方说我认为猜测的次数。在一段时间之内。超过十次。
76:00
那累积起来超过十次,我认为它就是开口令,因为你正常用户在短期之内不可能连续输入那么多次错误。那如果是错。那就超过了这个阈值,我就认为是恶意的攻击。啊,比方说现在呢,是这样的,我这个机器上啊,因为现在没有猜口令的情况,不过呢,我可以构建一个,假如说现在我用王,你看我猜入口令,这是不是就猜错了,这这是错了,错了以后呢,就会记录下来,你看这里面有没有看到没,是不是有啊root失败登录,那B记录的是失败登录的啊失败登录那比方说我坐在远程,我去猜10.0.8的机器的密码。然后密码我敲错了,这时候呢,你这边也会有记录,你看这个拉特币是不是这边有一个4.27的记录。啊,那么我们利用这样的一个记录,它实际上这个,那B呢,查到的文件是来自于这个文件叫BTMMP,这个BTMP文件在哪呢?就在log下,就这个文件,大家看这个时间15:17。
77:13
啊,那这个文件呢,随着你猜密码,比方说我又猜错了一次,它会还会怎么样呢?往里加东西看到没。啊,变大了啊,这时候呢,你会发现它又记录了新的东西。好,现在呢,我把刚才那个网上的下载文件已经下载下来了啊,这个文件很大,100多兆。呃,所以里面记录了大量的黑客猜口令的这个过程。啊,这个文件呢,我们要想看也得用什么命令看,用拉B来看,拉B的默认你直接回车,他观察的是刚才说的这个目录下的这个文件,那现在我们看的不是这个文件,看的是我这指定的这个文件,那这个要怎么看呢?加个F就可以了,加个F后面跟上文件,它就可以看到里面内容了,注意这个不是个文本文件啊,这个文这不是文本文件,所以我们不能用T看。
78:07
是吧,所以用病例来看,那个B-F后面跟上,这就是黑客。攻击咱们这个。这是有的同学在互联网买的一个服务器,然后有短短的很短时间内内产了产生了100多兆的攻击记录,就被黑客猜密码,那大家可以看到前面就是对方用什么账号来猜,后面这个就是对方猜测的时候用的那个IP。所以我们现在是不是应该判断一下这个IP出现了多少次,如果这个IP出现了十次以上,我们是不是有理由怀疑他就是个黑客攻击行为?对吧,嗯,那当然现在问题来了,我怎么把这个。十个。以上的IP地址分别找出来,找出来以后我就开始把它是不是采取一些手段,比方说扔到防火墙里不让他访问了啊,万一他猜对了呢,是不是?
79:09
啊,超过十次,我不让他再再再猜了。给你十次机会。那现在怎么把这个地址取出来?我们要挑的是那个十次以上的。重复出现十次以上了,那是不是也就变相的告诉我们,我们要统计这个IP出现的次数?这个我们说过了,怎么取?怎么取啊?这个这个这个列怎么把它取出来。在。那取第三列嘛,是吧,取第三列咋取啊。
80:04
你用size命令能不能取,那赛咋取啊?Said。那呢,它这个地方。你要把这个东西取出来,那这个IP地址任意数字开头,任意非数字开头。那实际上大家看这里面它有一个SSH的字样。啊,你就找这种SSH包含这个字眼。
81:03
这种SSH的,SSH的这种行去找这个地址,那这个地址应该怎么找呢。那就是从行首。找到。数字对吧?啊,前面有个空格,后面是数字。前面应该就是非数字嘛,一直从前面行首一直找,找到第一个数字。结束。你看它的形式呢,就是前面是个用户名,中间是SSH,这个是取它的数字。那这个数字的IP地址,我们曾经给他说过怎么取。S,比如说晶晶姐。
82:05
那这个IP地址我们可以从行首一直取到这个位置。然后把这个呢做一个分组,然后再把它取到后面去。啊,那这个形式是不是就是IP地址的。从杭首一直到到哪儿啊?如果是点心,是不是一字不串?非数字的非数字,那非数字脱字符零到九是吧,一个以上啊,当然这写上扩展的正能表达式,那RN,然后接着这是不是有个。数字点。非数字点。
83:04
这加个点,那这后面跟上就行了,后面跟上,后面跟上,那我们这个是不是数字,所以不是数字,那就是从这一直找,找到哪呢数字点。点啊一个以上啊。空格啊,然后点心,然后这个做一个分组是吧,是不是就可以把它这个取出来了,那取个1P。一打印。啊,很多。然后接着我们统计一下有多少个。我先。你们猜猜有多少个?啊,这就是黑客攻击的次数达到了37万次。
84:05
啊,37万,那我们这是不是也排序啊,然后再去用那个取它的个数,然后取完个数以后再排下序,排下序以后是不是就这就取出来它的前十个了。对吧,这就取出来前十个了。没有。要不取诶我们没有取没有加害的是吧,加害取他的前十个默认不就十个吗?默认不就前十个吗?啊所以呢,我们现在它的连接次数就找到了,找到以后是不是我们就把这个IP地址拿出来就行了。
85:00
啊,那拿的话怎么拿呢?那我们是不是就应该把这个IP地址拿出来,拿出来以后我们想办法把它拒绝了,那拒绝的话呢,我们有一个命令可以拒绝访问这这个命令,这个命令可以拒绝某一个主机的访问,比方说我现在不想让七访问我,我就可以用这个命令reject,这时候我一旦回车,七就访问不了我了。啊,你看现在七聘,我现在是可以拼的。呀,这是什么意思?这个dup是什么意思?Dup说的是重复的意思,也就是说我现在去拼10.28,它一下回来两个包,它有重复的包,那为什么有重复的包,那这个是和我们上午的时间有没有关系啊?那现在有有重复的包出现了,它这有重复的啊,不管它了啊,我们现在把它禁用了,来禁用了,禁用以后呢,你现在去聘啊拼不通了啊不通了。
86:14
好,那所以我们现在想把超出,就是排名前十的人利用这种方法把它禁用了,那就是我们可以把刚才的命令写到一个。Where read,我们利用where read来实现,这叫这种攻击,这叫黑客的。啊,倒次攻击吧,相当于啊,我就猜我的口令是吧,好,那么我们把这段话给他复制出来啊,复制出来以后,这段话我们取出前十个来,不够,我们是不是要循环,循环什么呢?前面是数量,后面是IP度档。
87:06
是不是这意思?那这个数量。前十个我们就不管他了,后面呢,主要是IP的问题。那我们利用刚才讲的杠a input,杠s Dollar IP,是不是把它禁用就行了,这样就可以了。一旦执行完,那么我们这个里面将把这十个人的IP就放在了这个拒绝的列表里,现在我这个列表是空的啊,这有一个七的机器刚才刚加进去的。那现在我们一旦执行完,就会把这十个IP全给他拒绝了,那看看能不能拒绝。啊,这是数量,数量我们没用上,因为我们取了前十名。啊,当然你将来也可以判断一下,说如果这个值大多多少,我就怎么怎么样啊,现在看一下这边是不是把他们拒绝了,看见没。
88:04
这不全加进去了。这样的话,这个机器就防不了了啊。这也是一种。安全手段啊,安全手段。哎,这就是逐行处理,看到没有逐行处理。啊,这个呢,这个是这样的啊,就是我们用这个方法可以来实现一个。所以就是不允许普通用户,不允许这个用户账户登录no longer share类型,这个咱们之前说过啊,No longer share类型就是不允许用户登录,那现在他是干嘛呢?他要查看no log的用户的这种share的类型的用户的UID和呃用户名,那实际上就是把这个文件呢着行处理判断一下,取出它的这个行来,看看它里面是不是包含有这个S病的log的最后最后啊,大家记得这个写法吧,这写法是不是就正坐表达匹配,看看你的最后的这部分是不是用的是脑lo,如果是就把它打出来嘛。
89:04
对,这个很简单。而这就是这样的一个。循环的写法啊,好。呃,稍后还有一个菜单,菜单这样我们稍微休息会,待会来说咱们,呃,四十四十五吧,45回来啊休息会。
我来说两句