00:00
好,最后呢,把这一块收购尾了,都是干什么事呢?这两个东西啊,它都是干什么,前台进程,那所谓的前台进程呢,如果说我把这个CD给它关掉。我给它关掉,它就怎么样,它就没了,它就没了,相当于我在这CTRLC这个服务就怎么样,就关掉了,就停掉了,那肯定不合适对吧,假如说我们现在我举个例子,假如说我现在不是连的本地的这个虚拟机,而是连的阿里阿里云,或者说连的是公司当中装的物理机。你在工作的时候照样啊,还是通过叉L或者说CRT去连到这个服务器里面,正常工作的时候还是这样,那你觉得你晚上Windows就这样开的吗?不会吧,所以这些前台的进程啊,我们应该给他干什么,挂到后台去,让他在后台运行啊,要做这个事情啊,那怎么来呢,这边呢,给大家提供个脚本,但是现阶段啊,说实话这个脚本对大家难度还是挺大的啊呃,所以说呢,加了这句话。
01:09
当然我们稍微大家看一下基本的,因为你也至少学过一点是好吧,对吧,基本能看得懂,我们把大体流程去看一下,告诉大家对吧,啊拿过来到时候直接用啊,那这里边呢,在这个之前我们先要介绍一点好吧东西,第一个no harm。啊no表示不挂,放在命令开头去用的是一个命令,啊no它是干什么呢?就算关闭终端进程也继续保持运行状态,就是说我们把当前这个终端进程给它关掉。照样的继续干什么运行啊,但是现在这个不行啊,因为前面没有加什么。No have啊表示不挂起,第一个是这个意思,也就是说我们等会在命令前面呢,要加一个这个内容,第二个是Linux当中的一个文件。
02:00
第一呢,它是一个文件,呃,你可以往这个文件里面写东西,但是这个文件啊,被称为是Linux里边的一个什么东西呢,叫黑洞,所有写到这个文件里面内容自动丢弃。就相当于是扔掉了啊,Linux里面存在一个这样的文件啊,就所有的你往这里面写的东西都会丢掉,其实有很多时候有些正常的日志啊,我们不想要的就扔到这儿。也不想打到打到控一台控制台对吧,也不想要就扔到这个里面就好了,呃,我们稍微找一下应该是有的,我记得啊在哪呢,他这个文件知道吗。他就将这个相应的东西呢,给它放到了什么里面呢?啊,其实在很多系统的这个病例当中都会有这个脚本当中都会有这个内容,对吧,这个知道一下行了,是Linux里面的一个黑洞,好不想要的东西你就扔进去啊,它自动丢弃啊,自动丢弃的好,那么接下来呢,还有一个。
03:09
呃,什么二大于N的一对吧?啊,读起来还挺奇怪的,首先呢,在shell当中,它有三类,零,一和二,呃,零呢是标准输入,就是说如果你想从键盘输入,你可以写零指向一个什么内容,它就指的是键盘,就是说在下va当中我们也可以大家学过那个Java Java当中我们是不是可以从键盘当中去获取数据啊,Scanner是吧?啊,Scanner对象,那she当中它也能啊,零表示标准输入啊,它表示输入啊了解一下,那一二呢都是输出,都是输出,一呢是标准输出。标准输出二呢是错误输出。
04:00
就是正常的,是错误的内容对吧,他指的这个意思,他标准输出跟错误输出默认的在哪上,默认的都是控制台,默认的都是控制台也就正常的,我们如果说shell在位出错了,他会把日志打印到哪,打印到控制台。啊,就无论是正常的日志还是错误日志都会打成换制单,因为它默认的都在换制台,而我们等会呢,可以写命令后面追加到这个地方。重对象到一个文件里来了,我不打印到控制台了,R2又追加到AN1,表示出说什么事呢,将错误东西也重新到标准输出上面,也就是说错误的内容跟标准输出内容我都给它扔到什么黑洞,当然你可以不写黑洞啊,你可以写一个什么正常的文件,那你所有的日志就打印到这个文件里面了。啊,等会呢,我们能看得到啊,这些东西最后在命令的结尾,刚才我们看到一个no harm放在命令开头的,这个东西呢,是放在命令结尾的,它表示当前这个命令的后台运行。
05:05
啊,后台运行,如果你想简单一点啊,做法就这样去启动刚才我们的进程。对吧,当然这个have so to可以有两种启动方式,刚才我们就聊过了,对吧?啊,两种你用have so to,或者说用have-on service加上一个have so to都可以啊,也就是说这这种啊,把这个拿过来往这一放,这两种都可以啊,当然没有给大家去演示,你可以下去测一下,只不过说呃,你直接用have so to的话,它启动时间会更久一些,就是他会做两次校验,你可以去看一下它那个错误日志会打印两次。啊,会打印两次,它会多做一次校验啊呃,其实正常的你就通过这个命令就可以挂到后台去运行了。啊,挂到后台,那我们开来看一下啊,首先呢,这还素对吧,我把它停掉,这是麦素给它停掉,然后呢,这个地方我给它拿过来。
06:01
这个窗口就释放出来了,就可以用了,刚才是用不了的,而且呢,这个时候服务其实已经开了啊,就挂到后台了,但是这个时候你要想去关它啊,呃,要找谁呢?这个就不好找了,因为这里边啊开so to也好,那个原数据服务也好,以及我们的b have也好,它都是就是B它都经常都叫装上。那这个时候你看你告诉我挑哪一个,随便挑一个就拼运气是吧,好,那随便挑一个我就挑上面的。哎,不好意思,运气不太好,看见没对吧?啊,运气不太好啊,其实应该是什么下面一个对吧?啊,其实应该下面那个,那你通过这种方式去启动的话,你就只能干什么。拆了拼运气了对吧,这个时候呢,原数据服务就干掉了,你看是不是刚才我们启动的那个命令啊,对吧,啊就就给他开掉了啊,就给他开掉了这种呢,明显的也还不是说特别的靠谱对吧?啊方便,所以呢,我们要写到脚本里面啊,写在脚本里边,这个脚本呢,我们带着家看一下啊嗯,C进到并目录,然后呢,我们就写在这个里边,叫have。
07:26
service.s啊service.si插入啊,然后呢,把这个拿过来,我们带着大家去看一下,这个脚本写的比较复杂是吧,大家到目前为止应该没有见过这么复杂的脚本,那没关系啊,到你们学数仓的时候呢,一个脚本三五百行也是有的啊。帽啊,得慢慢学,一点一点来啊好,然后我们给他一个执行权限,对吧,呃,那在执行之前呢,我们还是刚才说的,要大家去稍微的捋一下它里边的一个什么逻辑啊,你得知道一下这里面干什么事,直接拿来用的话,完全都不知道,也不会合适,就穿吧艾利的。
08:08
首先我们一点看啊,呃,首先呢,定义一个变量叫havelo电压放在哪个目录下呢。Have home环境变量have home然斯,也就是说have的安装地底下对吧?呃,那么接下来呢,这个地方杠地。刚地表示什么意思?判断当前路径是否存在,并且是否是是否是文件夹。对吧,啊,那杠D如果存在也是,那就是处在这边取了反。
09:00
如果说目录不存在就干什么,创建一个这个能看得懂对吧?好,那么接下来呢,写这块,这个是叫定义了一个函数啊,定义了函数,那这个函数反正定义好现在也没用对吧?这又定义了一个函数也没用啊,这又定义了一个函数也没用,先不用看到用到的时候再说,那么接下来呢,K到了一什么意思?到一指的是我们当前这个脚本的输入的参数,而且是第一个,就是跟在have service.sh后面第一个参数,对吧,看你到底什么东西,那里面呢,可以start stop restar,还有一个status。查看他状态,或者说是其他的东西,其他的东西一概输出一个说什么不可用的参数应该用这几个对吧,就告诉告诉大家一下啊,你说错了对吧?写脚本的时候一般呢,我们封装想从安全性角度来说,其实如果自己封装法这个不要可不可以啊,可以吧,你自己瞎输怪谁呢?
10:09
对吧,运行不了啊,所以呢,最后做个校验,只要不是这四个当中呢,就告诉大家你得干什么输这几个内容啊,说这几个内容好,那我们来看一下,假如说我们开启的是大。那这个时候他就会去走什么start的这个函数了,对吧,刚才只是说函数低于了,并没用,那这个时候去用了,好,那你用呢,我们来看一下啊这块。首先呢,在这个函数当中,它又去用了一个什么?Check process,也就看一下我们这个是否正常,如果说你已经启动了,我还有必要去启动了没有,对吧,那你看啊判断这个如果。这个知道干什么,就是如果前面这个命令。
11:03
返回值为零。他就走and后面的,如果它返回值为一,它就走这个。那杠C。杠C还记得吗?这个东西下的时候有讲过吗?它是判断当前字符串长度是否为零。判断当前字符串长度是否为零。好,呃,也就是说这边为零啊,那就走and,如果不为零呢,就走后面这个,呃,不为零说明这个东西已经干什么存在了啊,一个PID存在了,就告诉我们原数据服务已经干什么启动了,不,不允许启动了,如果说它。为零,那我们就走它对吧,走它,它是一个执行脚本等于零啊,而大家好像很少用到什么e Val这种方式去执行这个执行脚本,它有一个什么点呢?就是说如果你当前给的命令或者脚本当中有很多参数的话,它会等到最后你把所有参数解析完。
12:19
再去执行,如果你用普通的SH或者其他的内容去执行的话,嗯,它做一次参数解析,因为我们可能参数里面还包含参数,你看啊这里面呢。当的CMDCMD不在这吗?CD里面其实还有什么?参数啊,就是说你脚本当中还包含了参数的话,最好用e Val去执行,它会解析到最后,然后去运行,而你普通的运行的话,它就只只是解析一层,只做一层解析啊,所以呢,我们要用这种方式去执行啊好,那问题就关键就在于我们刚刚所聊的,那如何去校验。前面这个地方到底要走执行启动命令,那启动命令是不是刚才我们自己粘布就运行的这个命令。
13:06
嗯。这刚才我们都测了吧,对吧,粘过去,如果说你找到的PID进程ID如果不存在,说明当前服务是什么。没有起的。当前服务是没有启的,对吧,所以呢,我们去启动嘛,如果说你的进程号我已经找到了。我就告诉你,原数据服务已经启动了,我不需要再启了,对吧,这是这个逻辑,好,那我们就再观察一下这个地方就怎么做了,对吧,它里面调用这个函数了啊,那我们就看一下它在这个地方,这个地方呢,我们做了一个双重保证。啊,这个。相当于是服务名,而它呢,是不是当前元数据服务的端口号呢?没问题吧,我们是通过服务名以及端口号两个内容来做校验的。
14:00
啊,两个内容来做校验的,哎,查看一个服务,也就是根据进程里面的内容去过滤,用什么命令啊。用什么命令管道直接用管道吗?你管道只是说往下传啊。查看某一个进程。用的Linux命令是什么?GPS我就要找固定的根据参数来,GPS不是所有的吗?对杠EF。这是所有的进程全部给我们列出来对吧?杠EF,然后接下来根据这个内容我往下传。过滤杠V这个是事。
15:06
Gra-V是什么意思啊,不想要的东西如果不加杠V,那就相当于过滤出来包含grab的这个地方,注意啊,这个就是找进程当中包含gra,而加了一个杠V,我就不要什么gra就不要他自己,不要他自己,然后再继续格水表,格表干什么事呢?我们再去找一下啊,来原数据服务在这个地方,或者说我们直接从这的啊,原数据名字在。嗯,这个地方对吧,呃,当然现在肯定没有,那我们练啊,我们去干什么事呢,我们去取一下,我们给他看一下,把这个命令呢,简单的看一下,然后呢。起来起来好以后稍等一下,他没有完全启动啊,这边还没有完全的去说什么,嗯,加一个参数。
16:08
来这个啊,这样就找到我们所在的什么。进程了,那那中间呢,我假如说把这个G给它去掉。这个表示找带have没多的服务,它有两个,你看下面一个是什么,是当前你启动它也启动一个进程,这是他自己。你看刚才跟这个对比,是不是少了它最后进程是不是也多了一个。对吧,这是他自己,因为你要去过滤它,你是不是进程里面肯定带这个。对吧,你是过滤参数往肯定带它,所以呢,我们才需要干什么事啊杠V那就知道了,杠I表示包含,杠V表示什么呢?排除不包含,我不要这个对吧?好,那你看啊,它的进程号这S,它的进程号是不是这个9213,你看这。
17:12
没问题吧,那怎么找到这个9213呢。用什么对aw k啊做切分。Aw k默认的按空格先分的,而它在封装这个内容的时候刚好就是空格,然后9213是什么?第二个参数对吧,到了二啊,那我们呢,Aw k之后呢,把第二位取出来,取第二位呢,得这样去。9213就找到了,对吧?啊,如果说你这个进程不存在,就像我们之前看到的,当我们进程没起的时候,你去过滤有东西吗?没有东西对吧,那我们就知道了啊,它焦验进程是否存在就是看什么。
18:07
竞争号对吧?呃,就看找我们的竞争号,这是通过什么原数据服务信息去找到的,还有另外一个,我们还可以通过端口号去找到什么。信息,那端口号,我们查看一个端口号中的Linux命令是什么呢?杠EF是通过进程去找。所有的进程对吧,而端口呢,我查看端口信息应该怎么着。当时学都学过对吧,那讲过吗?啊肯定还讲过,还有一些高级命令套过呀,讲过吗?DF杠讲过吗。
19:00
干嘛呢?套我干嘛呢?查看内存使用的吧,资源监控的吗?呃,还有是吧,DF-H呢,对查看磁盘空间的。那这些东西你要记得住啊,因为面试的时候有可能会问你,你常用的利率跟命有哪些,你不要跟他聊什么开尔CD是吧,虽然是你比较常用的,但是你不能这样聊啊,你得搞一些相对来说比较是吧,高级一些的,类似于这个杠EF啊,或者ne state的啊,Top l top对吧,我经常查看一些Linux资源的一些情况的使用情况等等这些内容,对吧?那这个是我们通过进程名去找到我们的端口号对吧?通过这个来找到,那同样的我们刚才传的参数啊,在这传的参数里面是不是有两个,第一个是进程比嘛,第二个是端口号,端口号呢,就通过ne state去找到。
20:06
啊,State去找的啊,就这些东西啊,那我们把这个拿一下啊,我们也是一样的去写一下,呃,首先呢,这个是相当于是所有的。这是不是后面带着端口号啊,1988看对吧,9870100209820这些东西对吧?啊,这是端口号啊,那有没有我们要的那个什么九。那个刚才那个段号是在。在这是吧,90839083好,那我们同样的要做什么。过滤对吧,啊,过滤是不是就定位到最后一个这个内容了,对吧?啊定位到最后一个内容了,那么这一块呢。9213,这记得这个东西吗。
21:01
照样的是一个什么进程号,是不是还是他这个进程号啊,那所以说我们要把它拿到,拿到之后呢,跟刚才我们拿到东西做一个什么。对比,如果两个完全一样,那就说明确确实实是你这个服务启动了,而且用的是这个灯泡,所以我们做了一个双重校验,相当于。对吧,啊两方面,那这个东西应该怎么拿呢。这个就比较麻烦了啊,它麻烦一点,那首先呢,我们得找到它aw k照样做切分啊,它是第七位啊,那首先呢,它还不是一个自传嘛,对吧,你数一下它是第七位,也就是说这边呢,我们先。AWK按照空格先分,然后呢,找第七位对吧,到了七,嗯,啊对,嘴上说到了七,然后敲S7对吧?那第七位是不是最后这个,这是一个整体的,因为它中间有没有什么空格,那么接下来呢,就要把它切开,然后取什么第一位是吧?啊也比较麻烦,再继续使用管道符往下传,所谓的管道符呢,就是将你前面执行的结果传给下一个命令。
22:17
对吧,管道符起到这样一个作用,然后这个东西你就不能用aw k去切了,也比较麻烦,这个斜杠对吧,还要再转移,那所以呢,我们用卡杠B然这个方式去接,加了一个定内容。啊,还是按斜杠给它切开杠F取第几位对吧?这是靠的命令啊aw k呢,取第几位是这样去取的啊,然后走一下。又把我们的什么9213就拿到了。对吧,9213拿到了,好,那当前呢,通过两个命令,一个是PID,一个是PPID。都拿到,拿到之后呢,做一个什么交易对吧?啊,是否是完全进程呢?是否是完全一样的,如果完全一样的,那说明是什么,同一个人起的对吧?啊,那下面的整个的逻辑通了,同样道理,还有一个搜,我们也稍微看一下啊so呢,还是去干什么。
23:09
去校验对吧,去校验,如果说TD存在了,这跟刚才不一样了,对吧。刚才杠Z是不存在,它这个地方少了一个杠Z,看见没?刚才刚才我们说了,如果这个字符串的长度为零,对吧?啊,它继续走这个呢,就是说判断它存在存在的话,执行什么Q把我们这个进程号,这不刚才我们找到进程号吗?给它干掉对吧?如果不存在那。服务未启动对吧,整体的逻辑是这样的,那重点的大家要掌握的啊,就这个就这两个里边的东西,一个是杠EF,一个是ne state下去可以自己诶一点一点的去敲一下,对吧,那其实在这块内容啊,呃,这个地方我们可以这样。
24:01
X所有参数传给Q。注意这个地方,前面是不是我们已经我把这个最后这个参数给它去掉,是不是找到9213啊,然后呢,传给走一下。这边怎么样?没看出来是吗?注意啊,这个地方启动的对吧,我不是手动跳的,这样OK吧,然后但是这个时候它就不一定是9213了啊,但无所谓是多少对吧,那我们都干什么用XX传给所有的参数传给K,就是现在的它进程是9495,注意看啊,这边没有关掉吧,我执行一下。是不是关掉了对吧?好,就是管道符是将上一层的命令结果往下传啊,继续对你的内容做操作啊,那通过这个脚本呢,大家主要关注一下,就是刚才我们提到的两个病例,一个是杠EF,一个是ne state啊,像这些高级病例显得有时候呢,多去看一看,类似我们所聊的top IO top df这些东西,多去用一用,别到时候面试题的时候去专门的去背啊,那我们这边呢,当然现在呢是不需要给大家发了啊,后面后期啊再给大家发,这是整理的硅谷的厨房宝典。
25:23
对,欲练辞宫是吧,呃,不多啊,应该我记得是85页,不止不止不止,错了200多页,200多页面试题,大家要背的面试题200多页不多是吧?呃,那么第六个字这块总结的面试题当中,就我们刚才提到的这些命令。你要记得住,然后简单的用法,对吧?它起什么作用呢?你也要知道啊,刚才提到的top啊,Df IO top对吧?T啊,这参数啊,参数就太多了对吧?一个命令,你说你把所有的参数全部记住,这个不可能记一些常用的一些参数对吧?偶尔去记一记,就类似于DF,那我们肯定要记一个杠H的参数。
26:19
因为杠H它是方便看的,对吧,它是,呃,如果说你达到G了,它就用G给你显示,如果你没达到G,它就用照明解释,如果你连照都没达到,它就用KB啊,它这样的,如果说你直接DF,它是接数,那你还自己算一下比较麻烦,所以说这个参数倒可以去记一下对吧?啊可以记一下类似于这样的东西啊,那在LIS里边呢,它还可能问的she的常用工具,就刚才我们是不是用的aw k cut,但是这些东西是不是都讲过对吧?啊都讲过,所以说这都是面试题啊啊所以说这块东西呢,其实有时候呢,可以去看一看啊,可以看一看,刚才呢,我已经粘进去了,对吧,而且这个也就关掉了啊,也关掉,那我们来用一下它啊B叫have。
27:07
Service,然后我们呢,Start啊,走你。对吧,那么这边呢,就开始正常的他会去打印日志啊,正常会打印日志对吧?啊,同时他还有一个地方也有日志,因为刚才我们已经把启动日志给他扔到哪了呀。啊,但是这两个日志其实呃,作用不大,这两个的日志,这两个志打印不了多多少东西啊,你想想看,你看啊呃,你启动动。就这这这个你们的做那个文件里面只能看到它啊,咱们启动have so two,我看一下啊have so two的应该在这上面对吧,那你在日志文件里面看到就是它,就现在他不把这些东西打印到什么。
28:01
控制台了,它就会写到这个文件里面,看到大小吗。很小啊,所以说最重要的这个日志呢,还是什么。还是这个地方,这个地方还记得是哪吗?太马的硅谷最早的时候,那个时候我们聊的这个地方的日志对吧?啊来监控他还是在,诶第二次校验过了啊,哎,这个哦,这个里面我用的是。啊对,你看这里边我用的是have so to,看见没,所以刚才是不是报过一次,错了,他又来一次,这是我们说的他教验两次啊,他会教验两次,我用的have so to度,所以说正好两个都给他去看一下,我们光说其实下去你也可以自己去做一个校验,对吧?所以最好呢,你在脚本当中把这个东西给他改成什么。杠刚service用这种方式去启动吧,它这一次说启动过程呢,稍微短一点啊,就起到这个作用啊,那我们还得等一会儿啊,因为现在你正常的你去看啊。
29:05
你看它的一个状态,他说window服务运行正常,但是have so to,干什么运行是异常,因为它还没有完全的干什么启动好对吧,还得说再等一会儿啊,我们等它日志,再等一会,再去看一下它的一个状态。好,这个时候应该是好了,好了之后呢,我们再来看啊。两个都怎么样正常了对吧?啊,它会校验,它会多等一会,这个地方呢,你就多等一会就好了啊,多等一会儿,这个时候呢,你就可以去正常的用啊用那个避去连B态去连都可以了,因为服放到脚本里边,那你要关的话也比较方便了,对吧,就不用像之前是一个天台的信条啊,呃,不好关,那现在呢,我们只要使用什么stop命令啊,给它关掉对吧,那这边呢,照常产日制说这个东西都已经那什么退出了,对吧?然后我们再看一下它这个状态。
30:01
两个人都怎么样,异常因为没有启动嘛,对吧,就给它关掉了啊给关掉了,这是我们封装的一个脚本啊,封装个脚本。
我来说两句