00:00
塞瑟尼瓦,阿斯多摩尼格的人称。这黄总怎么才来啊?我以为你家里拆迁了,不来了呢。好了,那我们今天继续学习的编程啊,进阶这部分,那实际上到现在我们最主要的编程的一些用法啊,差不多都给大家介绍完了啊,那今天呢,我们把剩下的一部分给大家来做一下介绍。啊,那在这个编程序的时候,Share中我们有一些小工具啊,可以让咱们做一些事儿,就非常方便。那第一个工具呢,就是。
01:00
这个呢,实际上是实现信号捕捉的啊,我们下一章马上就会给大家讲这个进程管理,其中就提到了信号,这个信号捕捉,它主要指的就是它可以把一些呃在认定中的。信号值进行跟踪啊,一旦发现有个信号发现出出现了它就会。可以自定义操作,而不用它的信号的默认行为啊,这个信号大家可能还比较陌生,但是呢,相信大家之前应该执行过一些其他的操作啊,比方说我这儿可以执行CTRLC。啊,我执行一下这个命令,这个命令呢,大家都知道,它是一个不停执行的过程啊,什么时候按CTRLC,它会在停下来,这个CTRLC实际上本质上就是向当前的拼命令发了一个信号。
02:03
啊,这个信号收到之后,它会自动的按照这个信号定义的行为来进行采取下一步下一步动作。那么在系统中信号非常多。我们用这个。Q,命令是可以看到目前支持的信号这些值的啊,那实际上我们也可以用这个命令看,也是可以的。啊。那这个信号里面列出的内容包括信号的编号,信号的全称,当然我们去描述信号也可以用简称,简称就是光跟这个sig后面的这个几个字母,大家看它每一个信号都是以sig开头的,Sig就是signal信号的意思,那我们可以在后面写他的,不写他这个sig开头,光写后面的,刚才我发这个CTRL加C,这个实际上发的就是二信号。
03:10
它对应的就是二信号啊,那这个二信号我们去描述的时候,目前来讲我们有三种描述方法,刚才也提到了,第一种是数字法。就写这个数字,第二种写全称法,第三种写它的简写法,这三种都可以描述这个信号啊,所以你写这三种都可以,有的时候大小写不敏感啊,你这个小写字母也行。那么在系统中信号非常多啊,那比方说我们后面还会用到一些其他的信号,比方说这个信号15信号。啊,这个信号我们在下一章讲进程会给大家详细展开说,那么这个三信号有时候也会用,什么时候用呢?比方说我们这敲BC,这个BC命令,我们都知道做计算器的,在这个界面里面,我CTRLC它也能退出来,那么但是我们也可以用别的方法,比方说我用CTRL键加斜线,大家看也是可以退出来的,CTRL键加斜线,那这个CTRL键加斜线,它实际上相当于三信号,它对应的就是这个三信号。
04:21
啊,那所以我们现在发现,当我们按一些键啊,实际上本质上就是向当前的这个程序呢,发了个信号。发了对应的某一个信号啊,我们发现很多信号收到以后,他会采取一些动作,比方说退出啊等等,那么我们编脚本将来应该是用命令,用脚本里面的指令来代替。或者是来发送这种信号,那么发送这种信号的时候。很有可能产生了这样的一个问题,比方说我这脚本正在执行,执行了一半的时候,可能不小心按了个CTRLC。
05:06
这时候大家想,是不是这个脚本就执行了一半就退出了,CTRLC不就打断了吗?对不对,但是我们不希望它打断我的程序执行,我一旦开始执行就不能停。就不可以停,必须从头到尾跑完。那这时候我们就需要有一种技术叫信号捕捉,就是我监控你是不是发了个信号过来,一旦发了信号,我就可以采取一个行为,就是忽略这个信号,或者是我。用一个自定义的行为替换了这个信号本身的功能,啊,这就叫信号捕捉功能。那信号捕捉我们可以用刚才说的这个命令来实现,叫。这个trap信号,它的功能就是实现了这个trap,这个单词是什么意思,这个单词大家知道吗?这个单词是什么意思。
06:05
啊,六级英语的同学答一答,这应该是四级英语就能答出来吧,是吧,叫什么呀,陷阱对吧?啊,查出来了哈。陷阱啊,你想陷阱是干嘛的,陷阱不是等着你跳进去了吗?对不对,等着你呢啊,等着你发生这个事儿啊跳进去好,那这是这个性子trap,那trap的使用呢,它是这样的,Trap加上一个。信号,那这就是我要捕捉这个信号,这个信号刚才说了三种写法都行啊,数字法,全称法,简称法都可以啊,比方说我们要捕捉那个,呃呃,那个CTRLC,那个CTRLC呢,就是二信号,我就写个二就行啊,或者是int或者c int反正都行,然后捕捉完这个信号以后,我要干嘛呀?诶我这写一个命令,那这个命令呢,就是说一旦捕捉这个信号,我不按照你的信号的行为了,我不去CTRLC停了,我就想执行我自自定义的行为,那我就可以写上了。
07:17
那比方说我这儿可以打一句话啊,或者是。做一些你想做的事,反正Linux命令就放在这里面了啊,你想干什么事都行。啊,当然你也可以忽略信号,那忽略信号实际上很简单,那就是我啥也不干嘛,这个单引号里面就啥也不写了,不就是这信号相当于来了我捕捉了啥也不干了。嗯。那还有就是我可以还原原信号的功能,原来信号是退出CTRLC,那我就退出,我就回到原来的信号的功能,那怎么回去加一个横线。就回复了啊。另外呢,还有个。串PP呢就是列出自定义信号的操作,那你你你不是自定义了吗?那到底啥呀,我看看对吧,你可以用这个命令来看。
08:07
啊,另外下面这个我们待会再说。啊,那这个信号呢,这个信号是可以写好几个的啊,你看我这写了两个信号。这两个信号实际上就是二信号三信号啊。那现在这段代码我把它复制一下,大家看一下能不能知道他要干什么。啊,大家看一下这段新这段脚本是做什么的。这个脚本就是当你按CTRLC或者CTRL斜线的时候,我并不执行你预先定义的行为,而是我打了一张这样的话。
09:04
是不是就是我提示说有人按这个键了,我并不会执行,我只是用我自定义的E指令。来替换你。那接着杠P是不是就显示出你自定义的这个。操作了对吧,然后呢,接着我们这里面开始做循环,这循环是循环零到。十啊,打印了很多遍。然后接着打到十的时候开始,他又重新改了。啊,不过这回没有改这个cute啊,改的是这个。改了这个呢,它就是。一旦你按CTRLC,我忽略你就我什么也不干。你白干了白干啊,不起作用啊,并且把它打印出来,那么接着我们从11到20之间的时候,你这时候你按CTRLC,它就啥也不起作用啊。
10:00
那接着我们这个这是不是回归到原来的值了,回归到原来的值以后呢,从21到30之间打的时候,你看CTRLC是不是它就退出来了。是不是这个逻辑啊。啊,那这样的话,我们通过这个显示的脚本就知道它的功能了啊,你看着从零到十之间,按CTRLC,它会打印一句话,十到20之间,他会啥也不干,从21到30之间它就退出了。应该CTRLC,那看看是不是这样看CTRLC。CTRL斜线,你看它是不是只是打印那句话而已,它并不退出啊,那么从11往后CTRLC你看根本不起作用。啊,当然我们要CTRL斜线还是起作用,因为那个没有没有取消。好,从21往后再看CTRLC,应该知道干嘛了。是不是就退出了。
11:01
明白了吗?是不是就实现了信号捕捉啊?所以将来你在工作中,你就可以用这种方法来实现。一些比较好的功能啊,就不让他按CTRLC终止啊,这些都是可以的,那将下来你可以执行一个恶作剧的脚本是吧,一执行他就显示删根删根啊删好多他肯定干CTRLC对吧?哎,这时候呢,你就打印说哎,这个你干了CTRLC不起作用啊,哎,我现在正在删根。请你把电脑关了是吧,重启好,那这是咱们下命令才可以做到的。那这个串命令呢,还有一个非常实用的一个小事例,就是这个事例。这个事例呢干嘛呢?就是当你的脚本退出的时候,这个是个特殊的退出,这个退出包括你的各种退出,比方说脚本执行过程中。
12:03
呃,这个CTRLC退出,或者这个脚本正常退出啊,或者这个脚本异常退出,比方说执行过程中,突然你把这个窗口啪窗口给关了,那窗口关了就是把这个插线的窗口关了,这是不是相当于就程序就停了。那么这时候我们希望不论是哪种退出,我都希望能够正常的结束程序。什么意思啊,就是我们一个脚本在执行过程中,很有可能他做了好多操作,如果你中间执行了一半退出,很有可能会造成一些垃圾文件呀,或者做了一些一半的事情残留在你的电脑上。啊,这个就会带来后来的麻烦,那为了解决这问题,我们就可以编一个函数,这个函数呢叫finish。这个分配合exit,它就可以做到一个好处,就是无论你哪种方式退出。
13:02
它都会自动的执行finish函数,而finishsh里面你是不是就可以写一些清理的代码,比方说退出的时候,你把一些垃圾文件呀,该删删对不对,不至于说残留下一大堆东西,哎,这就是一个很好的功能啊,那么具体来看例子,看这个。啊。大家看,我这儿创建了一个函数finish。然后这边打印了一个Apple,并且把它放到文件里。而且这是个杠A竖线,相信大家知道什么意思。啥意思啊,是不是就是在屏幕上打印的同时还要把它写到文件里,对吧?那这就是为了演示这个finish的功能啊,那么具体工作中,你在这你可以写一些清理命令。
14:09
然后接着我们就定义了。定义完了以后呢,我们就开始执行一个死循环。看见没有,这个死循环,它不断的执行,一秒执行一次。那么这时候不论你这个脚本怎么退出,它都会触发这个命令的执行。啊,我们来看看能不能达到这个效果。好,那现在比方说CTRLC是不是通终止了,终止了它触发了这个文命令的执行了吗?显而易见触发了,这是不是这个文件里面也写了个分啊,那我们来瞅一瞅,验证一下。有了吗?啊,你看CTRLC退出的,当然我们退出的方法有很多,我们还有很多其他的方法退出啊,我们比方说它可以啪把这窗户插了,这插了以后是不是也是直接就中断了啊,比如说我咔把这窗口啪直接给他断了。
15:02
断了,断了以后,那我们看看刚才的这个finish是不是再次执行了。我在打开。好,那我就看刚才那个文件就好了。哎,这八个结。第二个有了吧,刚才不是有一个吗?那第二个,所以你用什么方式退出,他最终都要给你执行一下finish。那这样的话呢,就可以有效的避免脚本执行一半造成垃圾呀,等等一些信息的出现,明白了吧,这也是比较好的一个功能啊。好,那这是给大家介绍的信号捕捉功能。那接下来咱们再来介绍一个其他的工具,叫make。这个Mac呢,很实用的一个工具。在我们将来编辑脚本可能会遇到一种场景,就是我希望用到一个临时文件。
16:06
这个临时文件执行完毕之后,脚本执行完毕之后,我们临时文件,临时文件那可能就不要了啊。那很多同学就想了,那我就随便建一个文件名,把一些数据放进去,用完了就把它删了就得了,但是呢,这时候有可能产生一个风险,就是你建的这个文件名很可能和别人。别的程序同名了。啊,比方说你你就觉得哎呀没人用这个ABC,结果哎,真的有人用ABC了。那这样的话,是不是就可能产生两个程序就乱套了,互相干扰了。那为了解决这问题,我们可以自己发明一种随机字符。比方说咱们之前学过的一些方法,可以生成随机字符,让他来当文件名吧。可以吧,你看我们生成过随机字符当口令嘛,那你是不是也可以生成随机字符当文件名啊,对不对,完全可以做到,但是那不还得你自己写程序吗?你不还得写代码吗?诶,这有现成的呀,拿过来用就行了,这个工具叫maketime。
17:15
嘎内看。Make ta呢?它的名字不就是创建临时文件,你看这单词不就是就这意思吗?Make ta,那么make ta呢,它的功能就是创建临时的文件或者文件夹,而且它的文件名可以确保不至于和你系统中的其他文件冲突,它怎么确保的呢?它是通过加随机字符。但是这个随机字符有个数有几个,你这个可以约定。啊,文件名和随机字符两个组合起来构成一个临时文件的名称。那么随机字符。有几个,至少三个以上,就是至少三个字符是随机字符,那怎么表示随机字符呢?叉叉叉来表示,明白吧,叉叉叉啊,就是叉叉叉啊,这不是说平时说的叉叉,它就是xxx代表着三个随。
18:14
啊,这个三个随机的图,你可以出现在前面,也可以出现在后面,也可以出现在中间。都可以,不过我们一般习惯的是出现在后面。那就意味着,如果我们ma ta后面跟上一个文件前缀,然后再加个叉叉叉,那它将以这个文件为前缀,后面加三个随机生成的字符,明白了吗?啊,那么比方说我们马上来体会一下。Make啊假设,那我们就叫M42叉叉叉,对于这个叉叉叉少了不够啊,不行,看看没。太少了,看到了吧,不够至少三次啊,三次是打底的啊,形成了你看那个42B ST。
19:08
对吧,BSTBST是自动生成的。啊,诶,那这个文件生成了没有。那屏幕上打印了,打印了生成了没。生成了没,真的生成。看懂了吗?哎,那他为什么要打印啊。必须得打印啊,不打印那我将来我咋知道他叫啥呀。所以对不对,所以呢,实际上这个命令啊,人家是告诉你,你将来是不是应该把它放到一个变量里去。明白意思吧,是不是得放到一个变量里去,你尤其你变脚本,你不放变量里,你到时候执行的时候眼睛看呀,肯定不是眼睛看的问题嘛,程序都是自动执行的,你是不是执行完了以后,把它放到变量里就行了,这不就知道当时生成的一时文件上,你下次不就可以用了吗?同时他既把生成的文件存到变量里了,又生成这个文件,是不是这道理啊。
20:09
哎,当然我们刚才说了这个。叉叉叉可以出现在前面后面都可以啊,比方说我出现在前面,甚至出现在中间啊,当然这个就很难看了啊,啊比方说。你看生成了哟,这个差的连续个数不够看。要写在前面,好像它没有当成字符是吧,当成了一个什么,就是普通的叉叉叉了啊,那也就放在前面没有起作用啊,那我们把它分开点行不行。这不行,那下来就是放在后面了,那就是放在后面,那放在中间,可以放在最前面,发现有问题。
21:00
但实际上我就放在前面,我就这样写,看清写这不也可以吗?是吧,应该可以吧,也可以。好,不过呢,我们一般还是放在后面,为什么呢?你放在后面的话,你这个前缀是固定的,是不好找啊,对不对,哎,所以一般还是放对后面比较多好,那这是咱们看到的,你看这里面就生成了很多随机字符,随机文件,当然这些文件都是空的啊,大家看这些文件都是空文件吧,那就相当于touch一样。创建了临时的空文件,好,这是给大家讲的。这样的一些创建。那么将来我们编脚本,在需要临时文件的时候,你就不用自己去发明创造了,直接拿这个就可以了啊,无非就是差的个数多一点,你就可以确保它真的是应该不会冲突对吧?你要三个觉得不踏实,你可以四个五个嘛啊,多加几个随机字符不就安全了?
22:08
好。那它还可以创建文件夹,用maketimeb啊,比方说我们这回给它存到一个变量里,这个变量加de,要生成是文件夹要加D啊,比方说我们在贝塔下来创建一个啊临时文件夹,那这个文件夹啊,起个名字就是啊,随便写个吧。戴尔叉叉叉,当然我也可以多来几个叉好。创建完了。创建完以后看一看这个Apple里面有没有东西。有了吧,那应该就是它了,那我们来验证一下吧,看看贝塔里面是不是它。懂了吧,这么临时文件就出来了啊,临时文件临时文件夹就出来了。
23:02
啊,当然我们还可以把它所在的文件夹。和你最终创建的文件或者是文件夹把它分开啊,也可以分开,分开的话,比方说这个文件夹,它所这个创建的临时文件,或者临时文件夹所在的目录。给它单独用选项来指定啊,也可以,那就用什么呢?用杠P-P呢,你可以等价于cab也可以啊,那所以我们也可以把它分开啊,怎么分开呢?那就是杠P把它分开能看明白吧。啊,这样也行。啊,这时候你看他又创建了一个新的。是吧,一样的一样的,那这样分开放和合在一起。都有同样的功能,但是为什么要分开放啊?那分开报,将来我们这个地方是不是可以写成变量,大家想过没有,我是不是可以定义一个变量,比方说啊,就叫这个副目录。
24:09
P啊,这个东西我想放在哪,比方说放在入下,我这不定义个变量嘛,然后呢,将来这是不是就可以引用这个变量。明白了吗?啊,你看因为我定义的是root,所以呢,这应该在当前的root下,是不是创建的种。那将来你把这个变量一改,这不就创建在这儿,将来新的这个目录的里面了,明白了吗?就分开了。好,这是我们给大家讲的这个啊,那好,那由此呢,我们前面曾经给大家实现过的一些功能,你可以考虑用这个了,比方说。当时我们想实现一个垃圾箱功能,就是我们删文件不是删,而是把它放到垃圾箱里,哎,现在你用它就可以做了,为什么呢?因为你要自己创建临时文件夹往里放,万一冲突了呢?
25:16
现在是不是用它就可以生成一个临时文件夹,你删的时候把它放在临时文件夹里不就得了啊,你看我这个脚本咋写的,你看这个是不是就是用它来创建一个临时文件夹,当然这个临时文件夹起的名字是探下,并且起了一个这不垃圾箱的意思是吧,这单词。不说话是吧。看来这这英语不好啊,你们啊英语不好啊,是不是都都没考过六级啊是吧。啊,杨总你还挺有那个啊,四级都没考啊,四级都没考你是咋大学毕业啊,但是不要四级吗?这这这么宽容了吗?这个世界怎么这么宽容了,我原来我们那个,我们班里头还就有那个上大学的时候那个四级没考过,四级没考过,后来留留级到毕业就说没有毕业证,没有毕业证是吧,现在就是扩招了,也好考了,毕业也好困难,因为这个学学历我觉得好难啊,那各位同学可能有同学还没有学历,那你一定要混个学历哈,这个不管怎么样先拿个至少,至少我觉得现在大专可能有点太少,你们至少就混个本科吧。啊,用什么方法,不管怎么样先混个学历啊,这个学历以后上班你换工作也需要啊,赶紧提前准备啊,理解大专不行啊。
26:57
大专赶紧换一个,至少得升级,升级到本科,要不你将来找工作会被人歧视是吧?人力资源就把你咔嚓掉了,不给你机会面试技术,你技术学的挺好,结果人人力资源说卡住你了,就吃亏了,好像听说过,还有就是明明这个同学技术挺好的,面试也过了,上班也上班啊,结果上班俩礼拜了,发现这个学历不够,就把它辞了,就大家看这个就是升级一个时间,这个大家就该知道你是分秒,后面再变成一个叉叉叉,你想我都已经进行到秒了,我再加个叉叉叉,是不是冲突几率基本不存在了对不对?哎,那这不就个目录就串出了吗?然后你删的时候,你把这个文件往这个目录一扔,那这不就是一个成功的垃圾箱。
27:57
嗯。对吧,而且上面还写着时间对不对,你用它来恢复数据是不是就没有问题啊。
28:03
在这一个很简单的一个小垃圾箱就做做出来了。啊,虽然这个脚本很简单,但是我觉得还挺实用啊,你们上了班可以考虑复制粘贴啊,拿过来用啊。好了。啊。接着我们继续来看另外一个命令,叫install。Excel命令啊,大家不陌生,虽然我们没有亲自用过,但是我们间接的用过哪个呢?就是编译安装的时候,我们曾经第三步编译安装,通常第一步是comp,第二步是make make install,第三步那个make install,实际上就用的就是这个命令。Install这个命令,它实际上就相当于这些命令的集合,听懂了吗?啊,就是它一条命令都给你干了,啥意思?连拷文件带建文件夹带改所所有者所有属组的属性全都给你弄了,这一条命令搞做好了。
29:10
默认情况下,我们先说默认情况它的语法,大家看这个语法看起来像谁呀?啊就就就咱们就看上这前三个,你看起来像啥,这三个语法,你把这一道换成另一个单词,就跟那命令语法一样啊。M。MVCP不都是这个吗?是吧,这CP命令MV命令都是这个语法,都是这个语法啊,所以它的功能一样。好,那我们来执行一下啊,执行一下install。啊,那我们就拿一个俄罗斯方块吧。然后呢,我放到data下。嗯,然后我们这,呃,随便写一个文件,比方说a.SH啊,你看看效果啥样啊。
30:10
注意俄罗斯方块本身,它没有执行权限,对不对?是吧,没有好,那我们看一下这个文件生成。看见了吗?它默认就给你带执行权限,而且你看大小不都一样吗,是不是就应该把内容给拷过去了啊。所以也就是说,它默认就是直接给你加这个权限。所以为什么我们在make道里用,因为mix我们编译安装的时候不有好多二进制程序编译完了,那你不给它加成权,将来会运行有问题啊。啊,你这个就用EXO1条命令搞定了,连拷带加权限什么都搞了啊,当然了,这个命令并不仅仅是加权限这样的一个简单的功能啊,那还有好多,比方说还可以设置所有者,设置所属组,还可以建文件夹啊,这个地方默认权限是755,但是我也可以改成别的权限啊,比方说我这加一个M,我就想改成什么呢,700。
31:09
啊,换成一个B文件吧,啊,你看是不是700这个权限可以指啊,权限可以指啊,另外呢,我们改所有者所有组也可以改啊,比方说O勾是吧,BC你看改了没。是不是都可以改,你看这命令不是多方便呀,是吧,省得你拷过去还得用别的命令,Ho,那啊,什么改权限,这不就完事了啊。他也可以建文件夹啊,比方说D,哎,它能不能支持递归建文件夹啊,诶很神奇啊,很神奇啊。二。啥意思,这好嘞,这这这这比make还好好用啊make对吧?啊make你看这不杠地一样的,是不是直接加,而且递归直接把目录给你建好。
32:15
啊,所以为什么说这个功能还是啊那个阴道喜欢用它知道吧,哎,省事啊省事。啊,所以你将来边脚本可以用它呀,人家mix用你也可以用啊,对吧?啊。啊,你要是。那当然说到这呢,我们实际上make这个命令啊,它实际上还有一个功能,就是我们之前没怎么用的,就是它也可以指定权限,就是你建文件夹可以直接指权限,你看他有M。直接指定权限啊,比方说我们设置一个权限是700啊,你看它是不是700。就是这个命令,它建文件加的时候也可以顺便指定。
33:03
学剑。好,这是咱们给大家讲的这三个小工具,都是可以有助于我们编脚本的方法啊工具。还有一个工具啊,叫expect。那么这个PE呢,也是一个很有用的工具,不过这个工具呢,我们现在有了更好的工具,所以这个工具呢,怎么说相对来讲不像以前那么重要。这个工具它有一个自己的突出优势,我们都知道在Linux中有好多程序啊。有好多工具,它是交互式的,当然大部分的程序是非交互式的。那非交互式的,就是你敲一回车,它就全给你执行了,中间不停了,不能停是吧?那么还有一些是交互的,交互就停在那儿了,停着你干嘛,等你输嘛,人机交互嘛啊,比方说最简单的改口令,怕W地敲完有回车是不是等你输两遍口令啊,对吧?哎,还有什么交互性命令啊,你们还记得吗?
34:08
比方说BC计做计算器,BC敲完是不是等着你输公式啊,FDK是不是等着你划分分区,一条条敲指令啊,有好多命令它是交互的。那尤其还比较典型的就是我们SSH远程登录。啊用SCP拷文件,那SCP拷文件这个呢,那有比尤其尤其好像不太舒服,不太舒服在哪呢?比方说我把这个文件。拷过去我考到七上去,这时候呢,它考的时候它会提醒你输密码。你不输密码不过不去,所以这个命令你要写在脚本里面就不行了吧,你现在脚本里咔卡在那了,你还得敲敲密码,那还是脚本吗?那成了手工执行了,对不对,那脚本不就是哗哗哗就执行完了吗?对不对,那所以如果我要执行这个命令,我要把这个文件拷贝到100台机上,我编了个循环,好,那可好了,你敲把密码一百四一百四。
35:10
这时而遇见,这是不现实的,对吧?所以为了解决这问题,因派可以来出现一派呢,就是把这种交互式的操作给你转化成非交互,变成批处理。那这样的话呢,大家就不用人机交付再输什么东西了,那就可以写在脚本里就可以搞定了。那expect呢,它的工作逻辑就是它会监控你交互的某一个操作啊,比方说你监控你什么BC呀,或者你监控你什么这个像这个SAP啊,这个指令,那么一旦监控到这个指令执行以后,他就会盯着你看看是不是出现了一些过键字,比方说这出现password了,哎,那当然你预先你得先执行一下,你看看当前它会出现哪些特殊字符,如果出现了password,你就意思是说我要输口令了,那么一派D呢,就可以自动的把你预先定义好那口令提交给他,它就可以代替人工输口令了,意思了吧,这就是意思,就相当于派D的是个代理程序,这个代理程序背后监控着某个程序的执行,一旦发现什么关键字,它就自动把你预先定义好的那个信息来用1PAD提交给这个程序。进而就不需要再。
36:26
人机交互了啊,这就是他背后的逻辑啊。一呢,这个命令它是用专门利用语言写的,叫TCL啊,王牌电视是吧,哎,叫language啊,是一种语言写的。那这种语言它的功能就是把那些交互式的变成非交互,从而大大提升咱们运维的工作效率啊,当然你的脚本你得自己写啊。哎,我们写脚本,那肯定是第一次写脚本,肯定会比你手工直销慢很多啊,但是一旦写完了后续不就方便了,哗哗哗一执行就完了,哎,那一个pad的功能大体上就是这样的功能,那接下来我们来说一说1PAD它的。
37:15
内置的指令,因为pad这个命令呢,你需要去单独装,默认还没有。好,这个需要单独装。这个工具啊。装完以后,它实际上里面还有一个附带的工具,这个工具也挺好。这个工具,这个是我们我们现在讲的是这个啊,但这里面携带了一个这样的工具,这个工具也挺好,这个工具呢,干嘛的呢,这个工具可以生成你指指定的密码策略。来生成随机口令。啊,这个也挺好用,所以你们将来可以研究一下这个啊,这个命令啊,这命令呢啊,比方说你指定字母有几个啊,这个字母数字,数字下划线或者什么符号,你是混合的一种密码策略,它可以根据你定义好的密码策略来生成随机口令。
38:17
而不像说全都是随机的啊,到底多少我也不知道,不好控制,这个可以做到啊,叫MMK。Pass WD啊,你得具体看一下他的帮助里面怎么说的。诶,这是它默认的啊。他默认他不支持这个,他慢一下吧。你看这里面就有你看。这个这个例子它什么意思啊,就是生成15个的口令,其中包含三个数字,五个大写字母,看到没?也就是说你如果你执行这个,它就按照这个策略来生成一个随机口令。
39:00
啊,你看这么来。所以这个命令也可以生成随机口令,是不是更专业啊,这个东西比咱们以前用那个什么red那个要更专业,对不对啊,随机口令,不过这个需要安装刚才说的包啊,这包包不装它是没有这个功能的。好,那这个呢,我们也给大家记在这儿吧,这也是顺带的给大家讲一下啊。
40:44
好,这是刚才额外的一个扩展知识啊,大家做一了解,那我们现在重点来说说。那么expect呢?这个工具它本身是个交互式命令,它本身是个交互式命令。
41:01
你看它本身是个交互式命令,那其中在这个本身交互式命令里面,它可以执行一些指令,那这个指令有以下这些指令比较常见,比方说SPA。Expect send interactive,包括EP continue,那这个SPA呢,说的就是你要用PE来帮你监控什么程序。这个程序当然一定是个交互式程序。啊,那么用portport实际上是启动的意思,就是说我们用expect让它来启动那个交互式命令。因为用它来启动,是不是就意味着它可以监控它?对吧,哎,所以SPA就是用expect这个程序来启动那个交互程序。启动完了以后,我们就开始用来监控这个程序中间在屏幕上是不是打印了一些有特殊。
42:07
特征的字符串,比方说让你输口令,那他就你跟人机交互,他肯定可以屏幕上打一些东西嘛,啊,要不你咋知道他要让你干嘛呀,对不对,哎,所以这时候呢,他就肯定会提示你,那么提示你,那我就在pad里面用这个命令可以来监控你这个程序里面已经提示我要输什么了。那这时候一旦发现特定的关键词出现,好了,我就代替人工用send命令向该程序发送你预先定义好的。字符串,比方说密码之类的。那大家想这样的话是不是就已经实现了功能了啊,当然我们也可以再用派用这个指令恢复为用户交互,就是他把交互原来是交互的程序变成了非交互,但是我也可以再回到交互,就interact再回去也行啊,但有些过程我希望人机交互,但是有些过程我不希望人机交互,那我就可以用这个interactive进行切换。
43:16
那这个是匹配多个字符串的时候用的啊,如果发现一个字符串匹配了,那么又发现另外一个字符串,那我用这个就可以了。啊,这个你记住这个三个啊,记住这主要的这。这三个。这就基本上就够咱们用了啊,那么大家看这里面有一个例子,这个例子呢就是。用expect,然后接着,然后这个地方说的什么意思,这个地方说的就是我们监控屏幕上是否出现了特定的关键字,那么如果屏幕上有hi这个关键字出现,好,我就。大一这句话。
44:01
我就要向当前的这个屏幕上打印几句话,所以呢,这时候你随便输,一旦发现它有hi出现,你要说这里面是不是含有hi,它就会自动就出现这句话啊,我们来试试,当然它是包含的关系啊。啊。你看我用这个命令,它就开始盯着屏幕了,你看这个屏幕里面有没有hi字样出现,没字样出现,那就他就无所谓,他啥也不干。嗯,没有hi出现,啥也不干。好,那现在我们再来,如果里面包含hi,主要是包含啊,不一定是在哪哪个位置,你看见没。是不是屏幕上自动就出现了一个那个。指令对吧,就触就是触触发器嘛,是吧,类似触发器啊,有点跟那个陷阱捕捉之类的,是不是有点像陷阱捕捉啊,就一旦发现什么东西,哎,它就给你自动触发了。
45:04
好,这是刚才说的啊,当然它这个地方也可以捕捉多个,你看这个呢,就是捕捉多个。这个捕捉多个说的就是我们发现。哎,你如果你出现了hi或者hello或者白,那么分别打印这些符号。大家看这就是进行选择了。我刚才是监控一个,那现在我可以监控三个不同的字符,如果你出现了hi,出现了和出现了Y分别打不同的东西,看见了没?哎,你看如果我们来一个,呵呵呵呵呵呵,那么啊。那如果掰呢?
46:06
啊,比方说这边随便写BY,看到没。哎,当然大家可能很关心一点,就是如果里面又有,呵呵,又有掰呢。啊,比方说hi呵呵掰都有,那你说听谁的呀,那那就是按顺序呗,补货的一个对吧,反正你不能都要对吧,太贪心了啊,那匹配第一个就。啊呵呵啊,那这是刚才给大家讲的这个匹配字符啊,那刚才我是用这种写法,那我也可以把它分成多行写啊,大家看分成多行来写。
47:06
分成多行写的话呢,我们写成这样的形式。就这个写法。好,我把它分成三行写。这分成三行写,显而易见比你写的一大行里面条例要清晰一些,嗯,所以这个就是可以实现这个功能,好,当然我们刚才呢是为了演示啊,用交互式的方式演示了pet的功能,那接下来咱们用它来实际解决问题,那我们就用专门的expect脚本。那么一派呢,它实际上是一个程序啊,同时它也是一种语言,所以实际上它就是一种,也可以理解成一种专门的share啊,那咱们现在用太这种语言来编写。对应的脚本,那这边有一个例子大家看。
48:04
我写一。那这个脚本呢啊。他是和别的。语法写是不一样的。它是自己的专有语法,所以我们舌棒机制就要写,它听懂了吗?哎,因为我们现在写的不是share语句啊,是派,所以这个地方第一行写什么机制啊,然后接着SP,就是刚才说的SP呢,就是盯着你的屏幕上输入的字符啊,呃,盯着你某一个程序的执行,这个程序一旦执行,那么我们就会发现它是否在屏幕上出现了yes和password关键字,如果出现了,那我就提交默认定义好的一些信息,比方说如果发现yes no,我就要提交yes,如果发现word,我就提交预先写好的口令。
49:07
代替人工听懂了吧?啊,那比方说我们都知道SSCP,我去呃访问某一个文件拷贝到七的时候,你看他是不是要问我,你他是不是要问我yes no,你就你先你先写1PAD之前你先手工执行一下,你盯着他,那这时候一旦出现这个yes no这个提示,那显而易见,他是不是就意思是让我要输yes no这样的提示了啊,所以我就把这个关键字呢写在这了,你看yes斜这no那个yes要no,你最好不要手写,你复制粘贴对吧,因为你手写写出来有可能它这对不上号,所以你把这个复制粘贴一下,这是不是就和别的行都不一样的关键字啊啊那么一旦出现yes no,那意思是让我要输yes,那这时候我们就把这个yes写在这,这就代替人工敲yes了,你就不用手工敲了啊,然后呢,接着我们输完yes之后,紧接着它是不是提醒我们输口令,你看这不是有。
50:07
关键字趴座的嘛,当然你也可以,但这个东西不是关键字,没法确定,因为你连的机器也不一定是七,也不一定是root身份对不对,所以最明显的特征就是password,所以呢,一旦捕获到password我就提交口令啊,所以我在这呢把口令给它改成马哥edo,明确的确认一下。好,大家看这时候输马丢就可以了,那你看这我就预先定好了,用马格一丢,所以这样的话呢,当我们去拷文件到这个七的这个data下的时候,这个过程是不需要人工干预的。那我们来看看他是不是真的能考过去。啊。啊,我这考考考这个吧,不考这个了,考什么呢。一的意思,这是我们操一统版本。
51:05
啊,你看我这个机箱的release。是不是我8.2对吧,好,那我们来执行一下吧,注意这个东西它不是share,所以不要用干来执行它,听了吧,你这样执行。行吗?这是不行的啊,因为它不是BA语法写的啊,所以这个后缀实际上写的也不合理,我要把它改了,就就就这个就行了,因为它不是一个share脚本,不要以SH后缀,因为你后缀别人以为是share脚本,哎啊,所以我们加上执行权限,这可以对不对啊,因为他是用expect格式写的,他最第一行不是已经写了什么机制了,他就知道用派来解释执行它走看成了没。拷过去了吧,那我们来确认一下吧,这边过来没看过来了吧。
52:01
你看这个过程是不是就是自动完成,以后再也不用手工敲yes,再有用不着手工敲密码了。对吧。啊。还有下面的例子。好,我把它改了啊,改成release release看的比较清楚,不同版本,然后下面这个,下面这个也是用ipad写的啊,不过呢,这个是代替人工远程登录啊,什么叫远程登录呢?是这样的,我每次去登录远程主机,我们都知道要输口令的是不是这个登录过程如果能自动完成是不是也挺好,那所以我们就要编一个EXPRESS2。好,那么现在我们去把刚才这边写好的代码拿过来。
53:12
那这个代码它的功能就是代替人工去SS,对方同样如果让你敲yes就敲yes,如果敲密码,我就预先把码给写进去,注意这个地方加了个interactive,什么意思啊,就是我登录上去以后,我并不是变成。非交互式的,因为登上去我要手工去交互一些事儿,比方说我要自己执行一些命令,那我还希望变成交互,那这时候你加个interactive,那这时候它就变成了又是交互式了。啊,那我们把它加上执行权限。然后执行一下,他当然实际上你不加执行权限,我们写一个派是不是也可以啊。这行不行?当然你要这样执行,你看它实际上也是可以就就就跟BA一样嘛,啊,它只不过非就是新的一种,你可以理解成相当于另外一种解释器,另外一种share对吧?诶你看登录上去了,登录上去以后我敲LS,这是不是就是交互的,看见没,那为什么交互了,就是我这写了一个恢复成交互对吧?哎,我比方说干完事了删根删完了回来了,这不就完了吗。
54:23
对不对。好,这是那另外一派,它还支持设置变量,那设置变量。啊,设置变量是这样的,我预先把我连接的IP写到一个变量里。注意这个是expect的语法啊,那它这个set IP等于就是十点点七,实际上就跟我们share中的IP等于十点点七是一个意思,只不过就是它自己那个TCL语法是吧?啊,然后这个user是个变量名,它的值什么是root的啊,用set来赋值,Password是马给丢,这样设个超时时长,这个超时时长呢,有可能你需要设一下,因为这样如果你不设超时时长,它可能会。
55:18
啊,这个时间等了好,等了一段时间,发现你连不上它就中间断了,所以你可把这个时间尽可能加长一点啊,比方说你发现你的机器连接啊,这个十秒。可能会才能连上去,那就把这个时间加长一点啊,避免说他时间太长,这个pad等不及了就退出了啊,然后接着我们怎么用这个变量呢?SSH,大家看这是不是就用到那两个变量。这个user就是这儿的名字吗?这个IP不就是这的IP吗?然后把密码是不是也可以跟写到这个ipad里面,这样的话就代替了人工。啊,当然这个时候能用到的是密码啊,你看是不是也实现了。
56:13
啊,再次实现了。另外我们想把这个密,把这个变量进行方便的修改,我们可以用位置参数来实现,位置参数在以前写脚本的时候啊,我们叫DO1DO2DO3之类的,它这里面呢,不叫DO1DO23。他叫什么呢?他叫这个。它叫LA index Dollar为零零表示第一个参数,一表示第二个参数,二表示第三个参数。那这个写法稍微啰嗦了一点啊,但是你记住就行了,这个就代表着道一,这个代表道二,这个代表道三。
57:08
明白了吧,啊,其他都是一样的,所以我们现在用这个命令。我们可以。写了。这个第一个呢是IPIP的话呢,比方说我们可以再找一个新的机器,不一定是七啊,不一定是七啊,我可以自己指定一个新的机器。啊,比方说我这儿有一个17,我把这个17启动起来,哎,这也是七啊。电视器。那就把这个打开。
58:17
37。17个人的。好,那这个应该是18这个机器啊,好,那这个18的机器呢,我连一下。好,然后呢,我把这个密码啊v edo啊edo好了,这样设完了,设完以后呢,我们现在在这个刚才编好的脚本里面,我这就可以写了,他第一个参数是IP,所以呢,我这就写IP10.0.0点。
59:03
18、第二个参数是用户名,第三个参数是口令。啊,直接执行看上去了,成功了没有呢。成功了吧,这不上去了吗?见面这样的话是不是就方便了,因为我们可以写成参数形式。这个可以随时改。兄弟。好,那接下来我们不仅可以连上去。交互,我还可以连上去做一些事啊,比方说连上去,我们希望它自动的创建账号,那创建账号怎么做呢?诶我们可以这么干,就是我们不仅提交yes,提交口令,一旦登录成功,我们都知道会出现。井号的提示符就是一旦成功登录,成功登录是不是就会出现什么。
60:03
中国号井号这个提示,那么这个一旦支出出现这个就说明我们已经登录成功,登录成功好,我就发送什么创建账号的命令,并且更改口令的命令,所以这时候呢,当然我们最后呢,还要退出退回来,那这样的话,那这个脚本做完了以后,是不是就相当于自动的批量的执行了命令。好,看看这段脚本,这段脚本前面也是用变量位置变量,然后登录上去以后提交yes和口令,并且自动执行创建,哈哈用户和。把他口令制定好。啊,当然我们在七上看一下,他这应该是没有哈哈用户的。啊,没有好,那现在我们用这段脚本来把哈哈用户及密码给他生成。
61:04
好,按照我们刚才写的,第一个应该是IP,第二个是用户,第三个是他的口令。看成功了吗?你看这不能看见吗?他是不是创建账号了,并且创建完了,是不是又退回来了,哎,你看这边干完了没。是不是哈,创建出来了。那你想有了这个东西了,那你是不是远程执行什么命令不都是很easy的事吗?啊,当然我们对expect终究来讲并不是很熟悉呢,它终究是自己的语法,大家更为熟悉的就是share。所以现在我们就想了,我们虽然用希望用于pad,但是我不希望用它作为是作为命令解释器,我们希望用share作为命令解释器,那么呢,这样在share中来调用派不就行了,而不是直接执行一派,所以我们下面的这段代码就是用share来调用一派,我们都知道一派本身是一个交互式命令,既然交互式命令,那我们就想一派它是可以支持标准输入重镜像的,所以我们就可以把标准输入重定向的内容传给派,让一派来接收标准输入的内容进行处理就行了。啊,那就是把那个标准输入的内容用T给它。
62:33
把那些指令用标准数给他传给T,那方法就是这样的方法,那我们来看看效果。啊,注意我们这个写的是一个脚本,是一个线脚本。好看这。
63:02
大家看,这是个share脚本,DOLLAR1 Dollar得三,还是未知参数,看这个地方我们用多行重定向艾因,因为exce我们都知道它本身是个交互式命令,所以我们用多行重定项把标准输入直接传给他,传啥就传给这些命令,这不就是我们刚才写的一派的指令吗?啊,这样的话我们是不是就可以。直接把这些命令传给他批量执行,批量执行完了以后呢,Uf结束,所以这时候是不是就相当于把一派嵌入到了share中,把这些变量都可以通过这种方式传进去,进而执行,执行呢?它的效果呢,就是将来在对方的机器上会创建一个呵呵,用户密码设成马丽丢,并且退回。啊,当然这时候呢,因为它是个share,所以我们就可以这么写了,后面跟上第一个是IP,比方说我们在七上还是啊口令把这一丢,你看执行成功了,执行成功了啊这个这个有时候零啊,你看实际上你看你你光写个这个这个七,你看这样行不行,你看。
64:13
是吧,哎,比如时候他可以缩写啊,当然这个不规范啊,还是老师写很好啊,看看赫赫有了没,赫赫有了吧。没意思了吧,哎,总之你看我们用了这种方法,这个以后我们将来批量管理企业里面的多台机器,那哪怕十台20台,100台,那不就编个循环的事儿吗?一会儿这10个机器,100个机器上面又自动把什么账号啊,配置啊都改了。啊,多方便。那这边它的作用就是用派在S乌邦兔上啊来,当然这还有乌邦兔,我这没有乌帮兔啊,不过呢,我可以起一个乌帮兔啊,这个乌帮兔在在在哪呢。
65:12
这个我把它启动起来。他的IP是101。当然,你要求这个配置呢,预先要知道远程主机的口令啊。好,现在我这有78,还有一个101。好,那么幺零的口令呢,我也把它改一下,改成了马丽一丢好了,那现在呢,我在我的这个八的机上,希望将来用它编一个脚本,能够在。
66:09
能够在七十八幺零幺这三台机上自动的执行一些操作,那我们就可以用这个脚本编写一个循环。来实现。好,那我们来看这是第二个脚本。我首先定义这个网段叫4.0.0root是它的用户名,密码提前写好,这个地方我们编写了一个for循环,我们这有的是这三个机器,那么这三个机器。78,那事实上你这也可以把它的这个IP写在这个位置。
67:07
你也可以写成这个,你写成这种形式也行,78。101,明白了吧。这个写在这儿更好,为什么呢?写在这儿,将来用一个专门的变量来设的话呢,将来改的话,是不是就是我们把前面的变量改改程序代码是不用动的,然后把这改成IP啊,我这给他讲ipd吧啊ipd。大家看懂了吗?
68:01
好,这样就行了,当然我这就不缩记了,好了,那这个ID和ID来自于IP list,这里面不就七十十八幺零幺嘛,然后再和前面的NET1组合,是不是就形成了一个完整的IP?然后再通过impact。来调用,这是root,这是它的IP,这IP来自于我们这的值,并且在上面创建一个T账户。那就意味着我们将来执行完这个循环以后,将来就会在这13台机上啊,就是七十八幺零幺上创建一个的T的账户啊,这个换一个账户名吧,刚才有。有什么账户了?刚才我们在七上创建了两个账号,哈哈,呵呵,还有谁呀?嘿嘿是吧,嘿嘿嘻嘻嘿嘿吧是吧?啊,昨天情人节是吧,你们怎么样啊?
69:18
嗯。好,那我们看看这三台机器能不能出现黑黑啊?好,我就不加执行权限了,直接跑一遍,当然要那这回,因为我把这个密码是不是都写在变量里了,我们是不是就后面就不用加位置参数了,直接跑。哎。那验证一下吧,就找个这边看看gett WD。嘿嘿,有了吧。看见没啊,18这应该也有。这是有了七我就不看了,肯定行对不对,行了吧。
70:02
大家没感觉到自动化管理的快乐吗?将来那企业里面100台机器,不也这不就写个这个IP的事吗?这个脚本你家将来拿过去用了啊,现成的啊,这脚本现成的,将来上了班无非就是把你企业里面的IP地址写在这,无非这个网段可能换一换吗?密码改一改,这脚本不都是现成的,将来你想干什么,你是不是就把这个命令替一下就行了?对吧。啊,甚至你都可以用变量来替代变变量,比方说你想执行什么啊,你想执行什么,你是不是也可以用命令替代,比方说你想三根跑路这种对吧,那你这样是不是就可以把它替换成三根命令。这这叫什么CMD是吧,这1T好,那这就是所有机器全删根。
71:06
啊,这比你手工又方便又干净啊,速度还快是吧。啊,所以大家可以下来思考啊,来试一试啊。好,我把这个稍微改一改啊,这个以前是用这个写法把它剃了。那里?换乘。IP list。是吧?对,好,这是给大家讲的。啊,这边这边的例子就是修改所有主机的SE策略。咱们装好系统以后,相信大家应该知道,Tos系列默认零策略是启用的,SSC策略是启用的,就这个地方,它是。
72:11
Enforcing的,那以前的话咱们是一台一台改,现在手工的不用了,编一个脚本搞定了啊,我们用这段脚本就可以把它搞定。好,你看这段话,这个单密码我得改成马丢。那这个IP呢,我也是用刚才说的IP list吧,那我们这现在有十点零点,呃7亿个十点零点00:18一个,因为我们只有两个主机啊,那个101它不是S,所以它没有S的啊,U邦兔上没有,所以不用改啊,然后呢,这就把它替换成。
73:07
Dollar。呃,IP list这这是不是就行了,你看这个是改SD策略,不过我这回因为我现现在已经被改过了啊,所以我这就把它正好恢复吧,这个是我把它变成。Enforce。变成一封。啊,那看一看是不是能够批量改回来。那走一遍。我改了七和18。哎,这怎么连一块了,上面是吧,IP list。
74:16
再往下是吧,这IP等于net.id啊,这个这个对我因为我这写人家这已经写了十了,所以我这不用写十了啊,那这个就可以不用net了,直接就就ID就行了啊,或者呢,把它改成七和18也行是吧,这个七和18啊,这样就可以了,就重了,哎,这回好了,看看改了没,那实际上你看这已经。
75:04
这显示是禁用啊,但是我们看一下这里面改没改,看是不是恢复成enforcecing了,这不用脚本写的吗?那你能改成forcing是不是就可以改给它改成disable没问题吧。那这个命令很简单。重复了,那这就是将来边角,本就这么简单啊。好,我把这个也放在这。替换一下。然后这个地方替换成IP。
76:02
累死了。啊,这样就行了。好,那这个脚本就实现了批量的远程管理,所以只要是交互式操作,你将来想实现自动化的管理,你就可以用我们来实现了。看了吧,所以这个脚本大家可以在它基础上调整就行了。好了,那关于脚本的这些工具呢,我们上午讲了好几个,也是扩展性的知识啊,那稍后呢,我们来看数组,休息一会回来,那个就是,那后面就是你写的那个之后有一个调的那个U,那个结束嘛,就是结束就是结束那个那个他也得有个结束命令,因为退出。
77:31
什么东西?买什么东西买什么东西一个。
78:01
对对对,你说在那个软件拼多多是吗?还是在哪扫描扫描啊行,我知道了好。知道了,行好,我知道了,那再见。
79:25
两个类型的话都是属于。我爱你。戈壁我内空14。工作。
80:43
馒。就在。我。
81:18
我们那声音还是感觉有点小。不行,可能离得有点远,相当是在我们那一边,说我们下,说我们,我们在后边12点才回去下。他跟我说,我还以为他,昨天我还以为他在逗我,然后我一看,11:50多的时候,他确实还在55开始瘦肉不行,把那个喇叭能再开大点吗?我不会调,那个柜员这个音响还能再开大点,他们后面可能听得不清不清楚。
82:24
在。他了。喂喂,怎么样?郝总生意怎么样啊?对了,昨天谁给我发QQ了春春。
83:05
发那个什么播放器上的那个可以看清楚的那个,我忘记是谁了,我QQ消息没有,我也找不着人了,找了一下午就说王老师的那个事情可以用另外一个什么方式看谁发的,谁给我一下。
85:26
你知道的,我。
86:12
所以马的话。家里还有。张先生。
88:03
我。是测身体测试的那种。
89:31
的。
92:36
那个。
93:11
当是。
95:54
好,我想啊。
我来说两句