Linux培训学习记录第3课.docx_第1页
Linux培训学习记录第3课.docx_第2页
Linux培训学习记录第3课.docx_第3页
Linux培训学习记录第3课.docx_第4页
Linux培训学习记录第3课.docx_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、初级安装 = 光盘安装 -OK2、中间装 = 网络安装3、高级安装= 自动安装:机器上架插网线Dhcp+tftp+kickstart(服务器端脚本)安装和登录命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh文件处理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln系统管理相关命令: df、 top、 free、 quota 、at、 lp、 adduser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last网络操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup系统安全相关命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswhoLinux命令第三讲-20121014一、正则表达式:1、正则表达式的定义一个正则表达式的样式是一个字符串,字符串里的字符被称为元字符。它代表着匹配或指定一个模式,比表面看到的富含更多意义。2、正则表达式的组成a、一个字符集:纯字符集组成,无其他元字符,可以从字符表面理解其意思(即所见到的)b、锚:指定在一行文本中要匹配的位置,例如和$分别代表“以什么开始”和“以什么结束”的锚。c、修饰符:一类符号用于扩展或缩小匹配文本行的范围,如* () ,其中*含义比较特殊3、正则表达式组成训练:星号-*-匹配一个字符的零次或一次或多次(与传统的*有所区别)“aakk*”可匹配的内容(可不止是必须以”aa”开头的,最少”kk”结束的)匹配”aa”和一个或更多的”k”加其他字符;如果正则表达式的元字符是”aak*”则代表aa加零个一个多个k的组合。(注意,这里的匹配不是等于。匹配相当于可以搜索到,等于相当于可替换。看下图体会匹配和等于的区别摘自讲义).直接匹配“*”很多情况下只能匹配“0个该字符”,如下前两个命令的结果:注意:如果需要匹配一个由相同字母组合的连续字符串是,需要用”cc*”来表示,如上图最后一个命令及结果显示。典型用法:1、把所有重复字串都用本身的一个字符代替,应该如何做?下图只是用了临时寄存器一个位置:2、sed s/口口*/口/将多个空格(1或N个空格)替换为1个空格,常用于规范文本的空格数量3、sed s/c*/z/g第一个加z ,非c的字符加z,是c或多个c的情况下换成z4、seds/*/g和seds/.*/g都是删除所有,意义不同,但对任意字串操作,结果相同点的用法:.匹配除了换行符之外的任意一个字符。怀疑:”.”可以匹配1个或多个字符,是由于正则贪婪造成的。echo “a” |egrep “aa.”无法匹配,是因为”aa.”要求最少一个a 附加至少一个任意字符才能匹配,所以“a”的匹配结果是“无结果脱字符:-匹配一行的开头,但依赖其后跟随的上下文环境,可能因为上下文与目标字串不能严格匹配而造成不符合要求。正则表达式中表示否定一个字符集的意思lxxx以xxx开头的字串lyyyy$以yyyy结尾的字串美元符:lxxx以xxx开头的字串lyyyy$以yyyy结尾的字串-$-在正则表达式中匹配行尾“$”匹配空行egrep “0-90-9*$”匹配数字组成的行,“0-9:space:0-9:space:*$”数字和空格混合(不匹配全空格)egrep “a-za-z*$”匹配数字组成的行, “a-z:space:a-z:space:*$”字母和空格混合(不匹配全空格)方括号:s-在正则表达式中表示匹配括号中的一个字符,即 中的字符“abnc”匹配字符a,b,c,n中的一个或多个只匹配一个(或多个指定了具体字串)字母正则式: “c-n”匹配从字符(小写字母)c到n之间的任意一个字符“C-Fa-h”匹配从字符(大写字母)C到F或(小写字母)a到h之间的任意一个字符“a-z0-9”匹配任意小写字母或数字 “b-f”匹配不在小写字母b到f之间的其他所有字符。这是正则表达式中反转意思或取非的一个例子.(就好像在别的情形中!字符所扮演的角色). “YyEeSs”多括号字符集组合,类似于排列组合,YES,YEs,Yes,YeS,yES,yEs,yeS,yes,但yes的顺序不能变反斜杠字符-转义字符,使字符组合能表示转义字符后面字符的原本字面意思“$”表示原字面意思”$”美元符,而不是以什么为结尾的正则表达式的“锚”。注意:转义符用途广泛,不仅仅用于正则上的匹配。在脚本中,有些时候不想让特殊字符立即生效,就需要使用转义符。比如:Ssh到1.103机器执行echo “$PWD”的命令,如果没有转义$符号,该命令在linux中执行前解释后实际就会是:ssh 03 echo /home/training/zhengze。转义之后,该命令在linux执行前解释后会是:ssh 03 echo $PWD补充linux中单双引号的区别:单引号与双引号的最大不同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符 ,而不会有特殊符号。利用变量解释单双引号的区别:转义”尖角号”-用于表示单词的边界,不被转义的尖角号表示其字面意思:“小,大于号”“”扩展元字符:问号- ? - 匹配零或一个前面的字符. 它一般用于匹配单个字符.加号- + -匹配一个或多个前面的字符,与*的唯一区别是”+”不匹配零个字符的情况,也就是不会出现空格行的情况。-有待商榷,实际操作与文章内容不符合2012-04-07 22:17 正则表达式加号和问号或者星号和问号一起用原地地址是:/question/202218777.html 像+ * ? 以及M,N这几种量词(匹配数量)默认是属于贪婪量词,进行贪婪匹配什么叫做贪婪匹配呢?贪婪就是尽可能的多匹配,贪心的意思。比如现在目标字符串是 AAAA ,四个A组成的字符串,A* 和 A+ 都会匹配 AAAA。A? 则会匹配 A这就是贪婪匹配,实际运用中,有的时候我们却希望尽可能少的匹配。比如目标字符串 ab此时如果我们使用了贪婪量词.* 则会匹配 ab 。整个字符串可是我们只想要匹配第一对span标签怎么办?此时就需要用到懒惰量词,意思也很明显了,能偷懒就偷懒,呵呵,懒惰量词与贪婪量词的差别就是在贪婪量词的后面加个?号,就构成了懒惰量词,如下表:贪婪量词 懒惰量词 A* A*? A+ A+? A? A?AM,N AM,N? 还是以目标字符串 AAAA 来讨论A*?, *号是匹配0次或多次,要偷懒怎么办呢?当然是最少次数了,也就是0,所以在这里匹配的结果是没有匹配到任何内容。 A+?:+是1次或多次,分析方法同上,最少次数是1次,所以匹配结果就是 A。 A?:?是0次或1次,所以这里也不进行匹配,会偷懒吧,呵呵再来看看刚刚的ab 要匹配第一对span,用懒惰量词就是.*? 我已经说的够明白了吧?这些内容我以前都是查了好多资料才知道的。 正则表达式是相当强大的语言,尤其在进行字符匹配和查找时,当然要需要花一定的时间才能掌握。-有待商榷,实际操作与文章内容不符合转义“大括号”- 指示前面正则表达式匹配的次数无转义标示符则只表示大括号,不属于基本正则表达式内容,只是技巧。“0-95”精准匹配5个数字(0,1,2,3,4,5,6,7,8,9中的数字)。注意:大括号不能在“经典”(不是POSIX兼容)的正则表达式版本的awk中使用. 然而, gawk 有一个选项-re-interval来允许使用大括号(不必转义). bash$ echo 2222 | gawk -re-interval /23/ 2222Perl和一些egrep版本不要求转义大括号.圆括号 - ( ) - 括起一组正则表达式. 它和下面要讲的|操作符或在用expr进行子字符串提取(substring extraction)一起使用很有用.竖线- | - 或正则操作符用于匹配一组可选的字符.二、流编辑器(sed)Sed是流线型、非交互式编辑器。它允许你执行与vi和ex编辑器里一样的编辑任务。Sed程序不是与编辑器交互式工作的,而是让你在命令行里敲入编辑的命令,然后再屏幕上查看命令输出的结果。Sed编辑器按一次处理一行的方式来处理文件,并把结果输出到屏幕。在本次课程中,只讲解sed最常用的几种功能。这几种功能可以满足日常linux运维需求,但是只能涵盖sed功能的冰山一角。想要知道的命令:1、删除每行从第四个开始向后的字符,并显示结果2、只想显示每行第一个字符,或者最后一个字符1、按照行号打印格式:sed n1p file实例1、只打印第一行sed 1p 1.txt出现重复,sed n 1p 1.txt可消除重复行参数-n:关闭显示打印功能cat xinghao.txt | sed 1,7p ,p表示打印命令 不加最后的p则报错:cat xinghao.txt | sed n 1,7p匹配:cat xinghao.txt | sed -n /abc/p实例2、消除重复显示的情况sed 2,4p 1.txt 出现重复行,sed -n 2,4p 1.txt 可以消除重复显示的情况打印匹配行(相当于egrep)在引号中,在打印命令“p”前,可以放置一对/标识符,来代表匹配。形如/ /。实例3、打印含有字母“c”的行sed n /c/p 1.txt实例4、打印以某个字母开头的行sed n /a/p 1.txt实例5、打印指定重复数量字母所在的行实例6、打印bb与 cd之间的行 cat seds.txt | sed n /bb/,/cd/p 基于打印包含一个字串字符串所在行的正则表达式 sed n /xxx/p seds.txt扩展正则贪婪:”.*c”会匹配到最后一个c字母出现的位置,在操作时需要注意 可以看到,匹配在第一个“c”处并没有停止,知道最后一个c的出现才停止。实例7、显示指定行中被替换后结果sed 3s/this/that/ 第三行中的this替换成that2、删除命令d在默认情况下,sed的删除操作并不直接作用于文件本身,而仅仅是在打印的时候不打印匹配的行,有些类似于grep v。如果需要删除操作作用于文件,在有文件写权限的前提下,可以使用sed i参数来使删除操作作用于文件。注意:不是所有的unix自带的sed工具都有这个功能。删除指定行实例1、实例1、删除第三行,删除17行扩展删除第1,6,7行,可以看到,sed命令仅仅是在打印的时候忽略了第三行,实际上并没有删除第三行。注意:在实际操作中,不加-i参数反而更加常用。一般的做法是保留原文件,仅仅将sed的结果重定向。注意:一般在删除操作中,不加-n参数,-n参数告诉sed只显示出操作的行,对于打印命令很有效果,但是对于删除操作,操作的行已经不存在,如果再不显示未操作行,将看不到任何结果sed /d 删除包含this的行,如果删除指定的行,则要用管道符sed -I /d 1.txt 将删除后形成的文件更新源文件(#危险操作,应该先确认结果,再添加-i参数#)删除匹配行实例2、删除以”this”单词开头(结尾)的行(按条件定点清除目标)总结:用界定符表示单词需要考虑多种情况,如果使用锚定符则方便很多。如果要删除含有this单词的行,不使用的话,正则的写法将要麻烦的多,尤其是在不确定该版本sed是否支持扩展正则的情况下,如下所示:在sed中,可以用“;”来分隔若干个命令,这里分隔成三个删除命令。这三个命令依次执行。可以看到,依次匹配了this单词开头的情况,中间的情况,和结尾的情况。虽然文本中没有this结尾的情况,但是如果我们拿到一个特别大的文件,那就无法确认是否有这种的情况。注意:建议不要使用这种方式,不是特别友好,看起来比较费劲。不如写成sed /d|sed /d的管道形式,虽然多敲了一些字符,但是逻辑更加清晰。并且管道的效率和例子中的写法效率是一样的。实例2、删除连续的a和连续的d的行及两者间的行注意:这里很容易写成/aa*/,/dd*/,考虑为什么不正确。实例3(无解):精准删除指定单词或单词所在行echo woshimofeiwoshimofei | sed s/fei/yan/g 精准匹配转义字符 ,如:希望替换“.”为其他字符,则需要转移转移的边界:替换所有is 为was,但开头和结尾需要特殊处理实例4:只显示数字的内容假设一个文件,里面有数字和大小写以及一些字符,显示数字以外的内容。提示:使用“”和“”来取得数字以外的内容3、替换命令在日常工作中,sed命令最常用的用途就是替换。其实上面讲到的打印和删除,都可以使用grep或者grep v来实现(匹配两行之间的操作不可以)。Sed的其它功能也都可以有替代品,比如删除重复行等;更复杂一些的命令用的很少。虽然sed的替换功能可以被tr命令代替一部分,但是tr命令并不支持正则。于是,sed在运维人员眼中,甚至仅仅是一个替换命令。sed的替换可以是字面上的替换,也可以是正则匹配的替换。正则形式出现的替换会更多一些。下面以一些例子讲解sed的替换用法:实例1、sed替换的基本格式cat file | sed s/aaa/MMMMM/ 遇到第一个符合要求的字串进行替换,必须三个分隔符“/”实例2、sed全局替换cat file | sed s/查找的条件字串/替换为目标字串/ 匹配第一次出现的进行替换实例3、指定行替换cat 1.txt | sed 4s/7777/wowwow/g习惯性的应该在分隔符后增加g用于全篇进行替换实例4、匹配行替换扩展:sed /aa*/,/cc*/s/line/lines/g把连续的a或连续的c的行中的Line替换为Lines常见错误:1、不使用全局命令;cat 1.txt | sed example/s/a/an/ 无全局命令则只匹配第一次2、没有考虑被替换目标的限制(比如全局或者左右有空格);3、被替换目标不应该使用正则表示;cat 1.txt | sed /example/s/ *a */ an /g注意:sed的匹配模式中支持正则,替换成的目标是不支持正则的。比如,s/ .* / .*/,将把所有内容都换成”.*”正确替换指定内容的方法:cat 1.txt | sed /example/s/a( *example)/an1/g解释该命令:首先匹配example,因为只有example前的a出现了问题;然后将“a example”换成“an example”,这样需要匹配”a example”;但是我们并不知道“a”和“example”之间有几个空格,不能想当然的认为是一个,于是匹配变成了“a *example”,这样可以匹配到一个或者多个空格;最后,我们并不想改变修改后的格式,想要和修改前“a”和“example”之间的空格数保持一致,于是我们将“a”后面的匹配内容放到临时的寄存器中,这样在后面的替换目标那一项中,直接使用寄存器中的内容,可以保证“an”和“example”之间的格式与之前一样。看上图就是一个更清楚的例子,保证了最后一行第一句话中的“a”后三个空格没有被改变,即保留了三个空格。实例5、匹配行之间的替换和打印和删除类似,替换也有这样的功能,虽然不常用。l 将连续”a”和连续”#”的两行及两行之间的字串”cc”全部替换成”CC”l 将连续”a”和连续”#”的两行及两行之间的单词”cc”全部替换成”CC”注意:字串可以重复,如ccccccc就代表了3个字串+一个不符合要求的字符c不要忘记了“”表示锚定一个单词,也不要忘记s/ / /中,第二个代表替换目标的区间不支持正则。实例6、删除某些字符扩展:精准的删除字符、删除所有符合要求的字串)可以看到,替换目标的区域空下来了,也就是把匹配的内容换成“空”。实例6+、删除重复的字母cat xinghao.txt | sed s/(.)11/g删除连续重复2次的字母,(.)表示已经匹配一次了),所以重复2次时才删除cat xinghao.txt | sed s/(.)1*/1/g表示将多个连续的字符替换为一个字符(临时寄存器生成之后可以复用sed s/(.)1*/1/g)实例7、在行首增加”#”实例8、删除行尾的”.”如果sed s/.$/g则“.”代表了正则,结果将不同,结果为删除结尾最后一个字符,如上第二条命令。实例9、删除多余空格实例10、将连续字母变成一个,并只显示修改行实例11、使用sed的修改参数,直接对文件生效操作流程:替换命令中也是可以禁止输出未改动或者未匹配项的,用-n参数,需要再次提醒,使用-n参数后,需要加上p命令才可以输出匹配或者修改的行;在s/ / /的匹配中,首先锁定某个字母a-zA-Z就是匹配任意一个字母;然后匹配该字母的连续出现,这个时候使用连续的a-zA-Z是无法实现的(思考为什么),只能使用临时存储器,将上一个匹配的字母存入,然后使用“1”再现上一个字母。思考:如果题干中没有要求只显示修改行,那么(a-zA-Z)1*就可以完成匹配,为什么?答:好像没啥影响实例12、当前匹配对象中含有”/”比如,将”/etc”换成”/usr/local/etc”,两种方法:方法一:通过转义符这种方法令人费解。方法二:将s/ / /换成任意字符分割,比如s# # #:实际上,sed 中替换s后面可以跟除字母外的任意三个相同字符来做分隔符,甚至数字都可以,但是作为分隔符的符号在匹配和作为替换目标时,必须转移。实例13、临时寄存器的使用sed n /(.)/p中的(.)表示将.(任意字符)存放在临时寄存器中sed n /(.)111*/p表示将.存放在3个(有了*就是以上的意思)临时寄存器,sed按行从上到下,正则表达式从左向右扫描,”1”表示第一个临时寄存器。如果出现两个(xxxx)表示有2个临时寄存器,xxxx表示正则式。实例14、替换以”this”开头的行中的某字串sed /this/s/line/lines/g 先匹配以this开头的行,再将这些行的this修改为that (可以使用“sed /this/p打印包含this开头的行)三、AWK编程工具awk 是用来操作数据和产生报表的一种编程语言。数据可能来自标准输入、一个或者多个文件或者是一个进程的输出。awk 可以用在命令行里用于简单操作,或者可以为了较大的应用而写到程序中。awk 从第 1 行到最后一行逐行扫描文件(或输入),并执行选定的操作(封装在花括号里)。比如:awk print filename最常用的例子是cat /etc/passwd|awk F: /zhangzhe/print $1 。含义是,查看/etc/passwd文件,结果给awk处理,首先用“:”代替空格作为分隔符,然后从第一行到最后一行逐行扫描文件,执行匹配“zhangzhe”的操作,如果匹配则执行花括号中的打印第一个域的操作。文件是必须的,如果没有文件,也可以使用管道传递数据。Awk是一门编程语言,作为unix工具来使用简化了很多,但是仍然有许多编程语言的特性,可以对目标进行一些列的处理。可以抽象的理解一下awk的处理过程,这个过程和sed相当类似。如果抛开awk的BEGIN和END(参考sed & awk,这两部分是awk在读取文件前的操作和完成逐行操作后的操作)。对于文件的每行,awk分两个阶段处理:1. 读取该行内容,分配临时寄存器,分配域名等操作;2. 对域做各种处理并输出。也就是说,我们对每一行的操作,实际上有两个部分组成:读入时和读入后。1、Awk基本输出1、最简单的选区域输出cat /root/install.log | awk print $1,$(NF-1),$NF -逗号作为默认的空格符可以看到,结果通过管道被awk处理后,只留下了第一列和第九列,语句的具体含义是:花括号前没有任何的语句,说明是默认的对每一行进行操作,而没有任何的限制;花括号中是打印语句,这里打印了$1和$NF和$(NF-1)。Awk顺序的为每一个域分配域号,$1(或$1F)代表从左边起第一个域,$2代表第二个。也可以从右向左数,$NF代表最后一个,$(NF-1)代表倒数第二个域,$(NF-2)代表倒数第三个域;打印语句中的“,”代表仍然使用默认的分隔符:一个空格,来分隔打印出来的内容。默认的分隔符分为输入和输出两种,输入可以使用“-F”参数来改变,输出的请参考sed and awk。2、awk输出中分隔符的几种情况echo “aa bb cc dd” | awk print $1$2$4 无空格的aabbddecho “aa bb cc dd” | awk print $1”111”$2”ddd”,$4 aa111bbddddd引号外的空格不会被打印,有没有空格对打印结果没有影响,只是为了程序的可读性而存在。输出中增加字串用于规整格式3、awk的对域的运算print语句中允许出现数学表达式或者一部分函数:下面的例子不是jion链接$1,$2。而是未被引号的字串做忽略处理了。二、Awk使用特定分隔符使用 特殊字符或者单词作为分隔符,可以1个以上的awk做分割1、单字符分隔符-F参数后面需要跟内容。当分隔符为单个字符时,可以像例子中那样紧跟着F写一个字符。打印系统中用户名和其使用的shell类型:Awk中的ifelse格式:awk F: if(xxx) print xxxx ; else print xxxx如果使用默认的分隔符,那么awk将会把passwd这个文件的每一行识别为一个域。修改了分隔符为“:”后,就可以正常的识别每一个域,当然,这时的输出分隔符仍然是空格。2、使用多字符作为分隔符实例:抓取Apache详细版本-F参数后面需要跟内容,有两种写法。当分隔符为单个字符时,可以像例子中那样紧跟着F写一个字符;当分隔符为一组字符或者正则表达式或者多个表达式的时候,需要使用引号,并且和F之间有个空格。实际上awk自己有匹配功能,可以代替grep操作。但是某些时候,grep操作更方便一些,比如grep的-o参数、-A参数等。3、使用“|或” 来作为分隔符zact xxx.gz | awk F “?|GET |POST ” print $NF如果上例:? GET POST都不存在,则整体作为一个域,$1有内容 ,$2是空在脚本中,获取本机的ip地址不是一件容易的事情,尤其是机器使用dhcp分配ip地址。这个时候只能使用ifconfig来确定机器的ip。使用ifconfig和grep语句定位到需要的ip地址这一行。当然可以使用多次awk来实现,也可以这样做:可以看到,将“addr:”或“Bcast:”作为分隔符,那么需要的ip地址在第二个域中。注意,需要“|”作为分隔符的时候,需要这样写 F “|”实例:特别适用抽取日志抽取日志文件中某一段字串有奇效,但是需要确认的是字串左右两边界能唯一表示该字串,这个是技巧:5、使用正则来作为awk分隔符.0-9不是数或者“.”的内容正则分隔符:截取ip地址如果不仅需要ip,还需要子网掩码的话,用上例中的方法也可以,不过需要再加上“Mask:”作为第三个分隔符,这样太麻烦。实际上,awk的分隔符支持正则。以字母、冒号和空格的组合作为分隔符,可以很容易的数字和点组合的ip地址抽取出来。注意:这里的a-zA-Z: *充分的利用了正则的贪婪性,正则会将方括号内的所有元素都尽量多的匹配在一起。对于目标行:正则会将以下三个内容作为“或关系”的分隔符:“ inet addr:”,“ Bcast:”,“ Mask:”,剩余的三个ip类型的字串分别占据第二、第三和第四个域。注意,分隔符的使用原则是:有用的信息外的所有东西,尽量都放进分隔符内。6、awk匹配打印步骤1先扫描行,进入内存;步骤2进行匹配;实例1、打印home后面的区域1sed /home/print $1打印不是home的区域1sed !/home/print $1判断$1是否等于aaaa,等于则打印$0=全行,等于则打印$1=aaaa按域匹配:awk /aa/print $1$1 域1匹配”aa”则把该行存入内存$1! 域1不匹配”aa”则把该行存入内存$0代表整个域,打印一整行判断打印实际上是文件年过读取后做的处理du sk * | sort nr 按从高到低的顺序显示占用磁盘空间大小及文件夹(文件)print表示打印行四、Shell Script开始前的准备1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论