00:02
大家好,欢迎大家继续收看上硅谷的云计算课程,我是沈涛老师。这节课呢,我们继续来学习命令啊,这节课我们学习一个叫做管道符的命令,哈,又加了一句话补充,命令啥意思啊,还是这句话,这玩意儿其实也是Sha尔的东西,哎,Sha有些东西它非常常见,所以我们提前讲,后面Sha尔编程的时候,我们就告诉大家,哎,这是share的就行,那这个东西前面会多次用管道风是什么,是竖杠。哎。键盘上这个书杠会打吧?我现在没讲,没给每个班的学员讲课,我都会问,这个杠会打吗?为啥很久很久以前啊啊,得有个六七年前了。然后在讲课的时候,正讲的开心的,底下一个学员突然站起来说,老师,你给我说的这个管道服在哪,我找不着,你给我打一下。我当时的第一反应,这家伙他妈是砸场子了,不是来上课的,后来发现这哥们是真不知道,他来这个这个学习之前从来没有用过键盘。
01:06
啊,有这样的情况,当然最后这个学员其实最终学的很好,而且呢,呃,其实就也逐渐转行成讲师了,然后呢,跟我现在是同行,哎,所以我还是说学的好坏真的和你的基础无关,可能还是看你的努力程度和你你到底有多想干这一行的这样一个决心好。管道符啊,竖杠在你的那个键盘那个回车键的上面啊,别真找不着,它的作用是连接多个命令,那它的作用是命令一的结果,作为命令二的操作对象,这句话耳熟吗?耳熟吧,回想一下我们前面讲find的时候。我们是不是在说eec,它的作用就是啥?命令一的结果,作为命令二的操作对象,也就是交给命令二来处理一个意思。
02:00
哎,那管道服是不是就和ec的作用是不是一样的。没错,各位,我可以告诉你,管道符和ESEC的基本作用是一致的。那为什么基本作用一致,我们还要开发出来两种这样的格式呢?原因很简单。我们管道符的这种操作命令一的结果交给交给米亚,我们把这种操作叫做文本流操作。哎,啥意思,流水线,第一个用户操作完流水线,流水线转给第二个用户,第二个用户接着敲,哎,文本流操作流水线。但是呢,泛的命令它不支持文本流操作,在泛的命令当中加了管道符,它就会,反正就是输出的结果,就命令结果是无论如何都不正确的,换句话说泛的命令不支持,那开发泛的命令的这个工程师,哎,他就觉得,哎管道说很有用啊,那泛的命令这个没办法开发出来,这种不能跟它的这个通用,那怎么办?我开发一个eec的选项,用它来模拟这个管道符的作用,所以他们俩的作用是一样的,但是格式不能通,不能通用find的命令默认是不支持冠道符导,当然如果你要用find的命令打印选项,把它打出来,用管道符去处理,那那就没问题了,但是那还还不是范子冰那本身支持的,所以小心。
03:29
这个东西就和管道符的作用是一致的。好,那。我们知道了管道符的作用,那我们举几个例子,看看这东西到底是干嘛的好不好,那么举个例子啊,各位。我想要长格式显示一下ETC这个目录下的文件行不行?可以吧,我想看看这里边儿的这些文件的详细信息,但是这个目录下的文件内容很多。哎,我会发现,虽然我的linus现在支持远程工具,虽然支持向上翻,但是我说过了,这个向上翻是有极限的,那也就是说,如果这个目录下的子文件数量真的足够多,这个东西翻到头时也有可能看不见前面是什么。
04:15
对吧,那怎么办呢?怎么解决这个问题啊。我们的学员就马上想到了,说老师那用冒命名。嗯。各位,你搞错了一件事什么?Mo的作用是分频,显示的是文件中的数据,也就是说他看的是字符串。而LL输出的这是命令的结果,也就是说它输出的是文件名,那换句话说,冒命令是没有办法直接分屏显示一个命令的结果的。他能看的仅仅只是文件里的数据,也就是字符串。这现在也就是说冒命令是不能直接用的。
05:03
那怎么办?那我能不能这样?我前面是不是说任何命令的结果都可以通过双大于号把它保存在文件里,比如说我把它保存在AC里这个文件。算了,别别别我BCD了,放在这里。那这样的话,我这个BCD里面是不是就是LL的结果了,那我是不是就应该可以用Mo来分屏显示BCD的数据,BCD里的结果是不是就是它的内容,但是这里边是不是已经写成了文件里的字符串,文件里的数据了,对不对,这个时候看是不是就可以正常分成了,但是我问你麻烦吗?你先在在里面存一点再来冒看一下,麻烦了。所以这个时候看管道服太大作用吧,LL,然后呢,冒一下看到了吗?这虽然是命令的结果。但是我说管道符是文本流,只要加了管道符,后面就会变成字符串,哪怕这是命令结果,然后呢,它就可以用冒命令来处理了,你可以这样理解。
06:09
把另另一个结果保存在了一个临时文件里,各位,这个临时文件是想象出来的,内存中可能是这样操作的,你别问我老师这个文件在哪没有啊,就想象的把它的临时保存下来,然后再用命令二去处理这个文件。哎。这就是什么帽的基本啊,不管道符的基本用法,这是也是非常常见了,分频显示命令的结果就不需要再干嘛把它保存在文件里了,对吧?那我们回车看这是不是方便了?那当然不止这个命令可以,理论上所有的命令只要有输出都可以加管道符,用帽来分屏好。这是第一个例子。我在这个例子就跟我现在是一样的啊,我说的意思就是先保存下来,然后再冒,不方便,那我们可以直接来管道服报一个意思,用来解释管道符是什么。
07:02
OK,第二个例子,那我想说啊,LL查看的这个目录下有很多数据。我想在里面搜索一个文件,比如说搜一下亚母的这个文件。那我这里肯定就是管道符了,那我现在问你的是,我这里是用三的命搜呢。还是用graph里面搜吧。各位,那我们回想一下我们的find命令和gra命令,我说find命令是在系统中搜索符合条件的文件名。而格呢?是在文件当中搜索符合条件的字符串。对吧,Find是找文件名呢,Graph是找搜串的,那我现在问你,我这里搜的是不是就是搜了文件名,是搜了文件名,对吧,那我用find呢还是grap呢。我相信你们有一大半的人会告诉我用find,我告诉你不对,用。原因。
08:01
没。我们说了管道符是文本流,一直在说,只要加了管道符之后,不论前面的结果是什么,后面都是纵率。不论前面是文件名还是命令的结果,还是什么,还是输出,还是用户,只要加了管道符,导入之后,它就是文,就是祖传。其次啊,我前面还说了,说啥find的命令是不支使管道夫直接操作的,这里就凭这个,你加过饭的也不对,所以这里是gra提醒你啊,这是第二个例子,第一个例子我在解释管道符的基本作用,相当于把命令机理结果保存在临时文件里,用命令二去处理它。那第二个命令就在解释什么是文本流。明白吗?其实也还可以理解,就是理解把第一个命令结果已经是保存在一个临时文件里了,那它已经是字符串了,所以第二个命令去操作它的话肯定是关,所以这里是虽然搜的是文件名。
09:03
那么搜索页面还是关。如果你实在分不清,你就可以这样硬背,为啥?只要加了管道符,后面就是字符串,就全部都用字符串来操作它文本操作。就只要加了管道符,搜索就是关,不论搜录是什么,他要八其次回撤,你会发现它还是包含匹配,看,还有亚目的这个文件名的全都找到。好,这是第二个例子,这条例子是想解释什么叫文本流。那第三个例子,这个例子我们工作中比较常见,我们会用到一个叫做ne state的命令。Net是网络,State是状态啊,在RED7里这个命令可能没有,需要你手工装上两个包才有,还好我们现在暂时用的是RED6,那这个命令是可以直接用的。这是一个非常重要和常见的网络命令,这查询网络状态的网络命令,我们后边可能还要简单,再就说它应该是网络命令,我们后面到网络命令还会说一句,但是这个东西要用,我们提前就要讲。
10:08
That state,它有几个常见的选项,我们试一下来。Net state-tu。T显示TCP协议,我们到这看。显示TCP协议的状况。杠U显示UGP协议的端口,L显示监听。这个N显示的是我们的这个用数字显示,而不是用域名和服务名,这样更快,那T,那换句话说。这条命令的作用是查询系统当中所有开启的端口。格外。简单解释一句,端口是什么,我们前面一直说。IP是访问电脑的唯一技术标准,你可以把IP想象成你们家的门牌号码。要想寄信寄邮件,必须得有IP存在,它才能正常使用,对吧?
11:02
那端口呢,各位那IP是我们的邮件,比如说啊,北京区北京市昌平区某某小区某某楼,但是我问你啊。这栋楼里面可能有几百个用户在里面。哎,或者就是说你访问这个你们家,你们家五口人,你这封信是给谁的呢?光靠IP是不是只能找到你的服务器在哪?你的电脑在哪?对吧。那我要是这个,我还要确定什么,我服务器上到底是我哪一个服务呢。哪一个网络服务,我靠这两个字,那这个是服务器啊服务器。这个呢是服务器是硬件,我只能找个电脑,那这个呢是服务啊,就是我们的软件。你的一台电脑上是不是有可能去装多个服务,我既有网站服务,又有邮件服务,又有文件服务,对不对?那你仿IP能确定服务器在哪,我怎么确定服务是谁呢?那我是不是就可以用端口来确定?换句话说,我们所有常规服务的端口应该都是固定的。
12:06
我比如说阿帕奇,或者说网页服务的端口就是八零。那我是不是在你的系统当中只要看到八零端口,我是不是就认为你的系统开启了阿帕奇夫?对吧,所以我说IP是门牌号。端口呢,你可以理解为是收件人。你移动一个门牌号里,里边有可能有五口人,你一台电脑上有可能搭十几20个服务,那那你具体访问的是哪个服务,需要通过端口号来确定,所以这条命令的作用就是确定你本机有哪些端口看一下。上面的是TCP协议。下面的是UG协议,那TCP这里呢,就是你本机开的端口。各位,我们装的是basic server,安装的时候安装选项记得吧,不是最小化,是基本服务对吧?那可以看到基本服务其实开启的服务端口数量还是比较多的,这些服务大多数用不着,所以如果你的生产环境真的用这个basic,这个basic so,这个安装你这些多余的服务可能都需要手动关一下,后面会教你怎么关22不能关,22是常用的。
13:18
22就是我们这个远程连接用的这个端口,对吧?好,那这条命令的作用是用于查看你本机开了多少端口。哎,那这个命令是很有用的,对吧。但是。那我们可能有时候就会干嘛,比如说我想确认一下我本机有没有开阿帕奇八零。那人肉眼一眼就能看出来了,那你要是写程序来确认呢,我这个时候是不是就要加管道符了,我是不是就要在里面搜八零。对不对,当前是没有啊。但是但是如果这就证明没有,是不是就证明这个阿帕奇是没开的,对吧?我们比如说写个程序可以干嘛,让这个程序自动每15分钟,每十分钟执行一次,然后干嘛判断八零端口有还在不在,如果八零端口还在,证明阿奇正常,如果八零端口不在,自动把阿帕奇重启一下。
14:18
这样的话,你就算阿帕奇死机了,不超过十分钟。诶,可以写这样一个简单的12程序啊,而且很有用啊,那首先你是不是要判断八零端口在不在对吧,那这样的话是可以判断,当然这样判断太粗略了,为啥。这是包含匹配。换句话说,这确实能找到八零,但是我问你能不能找到808?能不能找到1080能不能。那这些是不是都不是八零,但是干扰项是不是,所以我们后面真要写这个脚本,这个脚本我们会再写12编程的时候给你写一下,我们是需要用正则。把这些干扰项都要过滤掉,只能匹配到巴黎财行。
15:00
OK,否则这样匹配是太粗了,只能包含,就是匹配的是包含八零根号,那就是什么含有八零是不是就全散内全算在内对吧,二幺这都算在内,这这个就不行,但是。在我们现在做这个例子可以,我们可以通过它来判断一下有没有开盘开放八零,为啥端口可能太多,有时候可能会漏是吧,哎这样的方式来看。这是这是第三个例子,我们哪没写啊,你们自己记下,用于手工查看一下这个,筛选一下某一个端口是否开启。其次。Net state命令除了可以用杠tu命令之外,还可以用杠Anna的意思就是所有。A的意思就是所有,那所有的意思是什么?看着。汽只能看到开启的端口。对吧,那我们这里呢,除了能看到开启的监听端口,还能看到。
16:00
有人,有多少人正在连接你?注意这个状态,这个读作type。律的。这个状态代表有人正在远程登录我的服务器。那谁在登录44.1,我的真实机通过这个随机的端口访问的是22,也就是我当前正在访问的这个远程登录这个。那如果我再开一个远程登录了,再登一个,你看再查一遍。这里就会出现。两个正在登录的。可以吧,其次啊,他还是可以看到网络这个网络程序的登录,网络程序在登录,当然这些东西对我们来讲可能就是干扰项了,可以忽略它啊,那现在各位那我想问你一件事。我可不可以判断一下我当前系统当中到底有多少人正在访问?可以吧,那有人说老师两个废话,这是虚拟机,就两个人就能数出来,那要是真是机呢?
17:08
几百个上千个,你不能一个个数去吧,所以怎么办就可以利用管道符。各位,这个例子是工作中的一个实际例子,那我们可以干嘛?Gra so,含有这个关键字的就证明它是正常动作,它就能找出过滤到其他的干扰项,这就是正常登录,但是还是我不能手工去数啊,手工数这个多了是就数不过来,怎么办?统计命令WC。他会统计后面加文件名,这个文件里边有多少行。多少个单词,多少个符号这样的方式,那我们这里这是统计命令,有人一看WC就笑啊,别笑啊,外国人的厕所可不叫WC,你你出去跟老外说WC,老外可听不懂你在说什么,官方的标语叫做toilet,对吧?但是呢,老外也不这么叫,他们常见的叫bathroom啊,就是啊,反正就是bathroom,就房间里的房间就是就是厕所啊,人这是这么小。
18:10
那好。那现在呢,我们干嘛统计啊WC,那我这里统计一下。那WC会统计有多少行,多少单词多少这个字符都没用,我只要统计行号就行,所以加个杠L选项就是统计行。各位双管道服嵌套啊。各位,我说了,它是文本哟,命令一的结果,如果命令二能处理,就能敲回来,命令二如果还能处理,还能往下交,如果你设计合理,还能往下交。它是文本流对吧,这个时候回撤看这个数就代表正在登录的数量。各位,这个例子是工作中一个非常常见的小技巧。我把它教给你们,哎,那这就是我们这个管道符的作用,那各位管道符我举了几个例子,第一个例子呢,用来解释管道符是什么。
19:02
第二个例子用来解释什么是文本流,第三个例子其实是刚刚这个过滤端口那个,这个也是工作中的小技巧,用于判断这个服务有没有开启。这四个例子用于统计我们的这个正在连接的数量,大家看懂了吧。好,这就是我们这节课的内容,好,我们下节课再见。
我来说两句