Linux运维笔记--第三部

第三部php

3. Linux系统文件重要知识初步讲解

  # ls  -lhi     (i: inode,每一个文件前的数字表明文件身份ID;h: human 人类可读)html

  显示:25091  -rw-r--r--  1  root  root  81  4月  15  00:33  oldboy.txtjava

  第1列:inode=>index node  索引节点编号。node

  第2列:文件类型及权限(共10个字符,第一个字符为类型,后9个字符为文件权限)。python

  第3列:硬连接个数( 详细参看ln命令的讲解)。硬连接是文件的又一个入口。mysql

  第4列:文件或目录所属的用户(属主)。linux

  第5列: 文件或目录所属的组。ios

  第6列:文件或目录的大小。nginx

  第七、八、9列:文件或目录的修改时间。面试

  第10列:实际的文件名或目录名。

4. Linux系统文件系统重要知识总体介绍

  第2列:2-10个字符  rw-r--r--.  文件权限(r: read ;   w: write   x: 执行;  -:   无)      第11个字符是一个点符号,与SELinux相关。

5. Linux系统文件系统重要知识总体介绍

  第四列:文件对应的属主或者用户。

  第五列:文件对应的属组或用户主。

6. Linux系统文件系统重要知识inode深度详解

  inode概述:硬盘要分区,而后格式化,建立文件系统。

  Innode,中文意思是索引节点(index node)。在每一个Linux存储设备或存储设备的分区(存储设备能够是硬盘、软盘、U盘.......)被格式化为EXT4文件系统后,通常都有两部分:第一部分是Inode(不少个),第二部分是Block(不少个)。Block是用来存储实际数据用的,例如:照片、视频等普通文件数据。而inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode包含的属性信息包括文件大小、属主、归属的用户主、读写权限、文件类型、修改时间,还包含指向文件实体的指针的功能(inode节点 --block的对应关系)等。可是,inode里惟独不包含文件名。

  查看inode大小的命令:

  # dumpe2fs  /dev/sda3(1) | grep -i "inode size"

  显示:Inode size: 256字节

  查看:inode各个分区总量(使用多少,空闲多少,使用百分比)      # df  -i

  查看block总量(硬盘使用状况)    # df  -h

  有关inode的小结:

  a. 磁盘分区格式化为ext4文件系统后会生成必定数量的inode和block 。

  b. inode是索引节点,做用是存放文件的属性信息以及做为文件的索引(指向文件的尸体block)

  c. ext3/ext4文件系统的block存放的是文件的实际内容。

  d. inode是一块存储空间,Centos6非启动分区inode默认大小256字节,Centos5是128字节。

  e. inode是一串数字,不一样的文件对应的inode(一串数字)在文件系统里是惟一的。

7. inode与block重点核心知识13点总结讲解

  f. inode号相同的文件,互为硬连接文件(文件的又一个入口)

  g. 一个额外你见被建立后至少要占用一个inode和一个 block.

  h. block的大小通常有1k,2k,4k几种。其中引导分区等为1k,其余普通分区为4k(Centos6) (查看命令 # dumpe2fs  /dev/sda/  | grep  -i "block size" )

  i. 若是一个文件很大,可能占多个block(4k).

  j. 若是文件很小,至少占一个block,而且剩余空间浪费了。

  k. inode大小和总量查看

      # dumpe2fs  /dev/sda3 |egrep -i "block size | inode  size"      ;            # dumpe2fs  /dev/sda3 | egrep  -i "block  count  |  inode count "

  l. 查看inode的总量和使用量命令 df  -i 

  m. 如何生成及指定inode大小  # mkfs . ext4  -b  2048  -I  256  /dev/sdb

8. block重点核心知识总结讲解

  有关Block的知识总结:

  a. 硬盘读取数据是按Block为单位读取的。

  b. 一个文件可能占用多个block,每读取一个block就会消耗一次硬盘I/O  。

  c. 若是要提高磁盘I/O性能,那么就要尽量一次性读取数据尽可能的多。

  d. 一个block只能存放一个文件的内容,不管内容有多少。若是block 4k,那存放1k的文件,剩余3k 就浪费了。

  e. Block并不是越大越好。Block太大对于小文件存放就会浪费磁盘空间。例如:1000K的文件,BLOCK为4K,占用250个BLOCK,BLOCK为1k,占1000个BLOCK。 访问效率谁更高?消耗I/O分别为250次和1000次。

  f. 大文件(大于16k)通常设置Block大一点,小文件(小于1K)通常设置BLOCK 小一点。

  g. BLOCK太大例如4K,文件都是0.1k,大量浪费磁盘空间。

9. block重点核心知识10点总结讲解2

  h. Block太大例如1K,文件都是1000K,消耗磁盘I/O。

  i. 恩健较大时,block 设置大一些会提高磁盘访问效率。

  j. ext3/ext4文件通常设置为4K.

  k. Block的设置也是格式化分区时候,mkfs  ext4  -b  2048  -l  2048  -l  256  /dev/sdb

10. 业务数据大小和block大小设置应用场景选择利弊说明

  见视频画图说明block占用空间的理解

11. 企业生产有关inode与block面试题案例

  企业面试题1:一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别能够写多少个?

  解答知识点:

  a. 上面的考试题考察的是文件系统inode和block的知识。

  b. inode是存放文件属性信息的(也包含指向文件实体的指针),默认大小128 byte (C58),256 byte (C 64)

  c. Block是存放文件实际内容的,默认大小1K(boot)或4K(非系统分区默认给4K),通常企业多用4K的block。

  d. 一个文件至少要占用一个inode及一个block。

  e. 默认较大分区常规企业真是场景状况下,inode数量是足够的,而block数量消耗的会更快。

  正确答案:

   a. 默认分区常规状况下,对大文件来说inode是足够的。而block数量消耗的会更快,block为4k的状况,1M的文件不会有磁盘浪费状况,因此 文件数量大概为100/1=100个。

   b. 对于小文件0.1K,inode会消耗的更快。默认分区的时候block数量是大于inode数量的。

       每一个小文件都会占用一个inode和一个block。因此最终文件的数量:inode会先消耗完,文件总量是inode的数量。

  企业面试题2:若是想磁盘写入数据提示以下错误:No space left on device,经过df -h 查看磁盘空间,发现没满,请问可能缘由是什么?

  解答:多是inode数量被消耗尽了。

  a. df  -i 查看是否耗尽了inode 数量。

  b. 企业工做中邮件临时队列/var/spool/clientmquene这里很容易被大量小文件沾满致使No space left on device的错误。clientmquene目录只有安装了sendmail,才会有。centos5.8默认就会装

   sendmail ,centos6.6 默认没有sendmail。

12. Linux系统文件属性类型介绍及普通文件类型说明

  a. windows里是经过扩展名(.txt)来区分文件类型的。oldboy.txt

  b. linux里文件扩展名和文件类型没有关系。

  c. 为了容易区分和兼容用户使用windows的习惯,咱们也会用扩展名文件类型。oldboy.sh ,oldboy.tar.gz

  在Linux系统中,能够说一切皆文件。文件类型包含有普通文件,目录文件,块设备文件,符号连接文件等等。

13. Linux系统文件属性更多类型介绍

  Linux文件类型分为如下几种(带*号的必需要掌握):

  **b: block(buffered) special      设备文件

     c: character (unbuffered)  special    字符文件

   *****d: directory             目录文件

          p: named  pipe (FIFO)         管道文件

   *****f : regular file (-)          普通文件

     ***l :  symbolic link ; soft  link      连接文件

   s :  socket                套接字文件

  # mkmod oldboy  c 5 1        建立oldboy为字符设备文件

  文件类型小结:

  •  - : regular  file    普通文件(*****)
  • d : directory        目录(*****)
  • l:  link        符号连接或者软连接文件(***)     快捷方式,它指向文件的实体。
  • 字符文件,块设备文件:c: character  串口设备、猫    b:   block     硬盘、光驱
  •  *.sock进程之间通讯会用到    s:  sock 
  •  p:  管道文件

14. Linux系统额外你见扩展名介绍

  Linux系统里常见的文件扩展名以下:

  • 源码 .tar .tat.gz tgz    .zip    .tar.bz 表示压缩文件,建立命令通常为tar 、gzip 、zip等。
  • .sh表示shell脚本文件,经过shell语言开发的程序。
  • .pl表示perl语言文件,经过perl语言开发的程序。
  • .py表示python语言文件,经过python语言开发的程序。
  • .html、.htm、.php、.jsp、.do表示网页语言的文件。
  • .conf表示系统服务的配置文件。
  • .rpm表示rpm安装包文件。

  运维开发缘由呢:shell/python/php三者之一,至少会一个,最好会两个。

15. Linux系统连接的概念介绍 

  在Linux系统中,连接可分为两种:一种为硬连接(Hard Link),另外一种为软连接或符号连接(symbolic  link  or  soft  link)。咱们在前面讲解过ln这个命令就是建立连接文件的,在默认不带参数的状况下,执行ln命令建立的连接是硬连接。

  若是使用ln  -s建立连接则为软连接。

  实践直观演示理解。

  硬连接:ln  源文件   目标文件

  软连接:ln  -s  源文件  目标文件(目标文件不能事先存在)   -s  (soft)

16. linux系统属性硬连接介绍及文件删除原理初步

  硬连接是指经过索引节点(inode)来进行连接。在Linux(ext2,ext3,ext4)文件系统中,保存在磁盘分区中的文件无论是什么类型都会给它分配一个编号,这个编号被称为硬连接。提示:硬连接文件就至关于文件的另一个入口。硬连接的做用之一是容许一个文件拥有多个有效路径名(多个入口),这样用户就能够创建硬连接到重要的文件,以防止"误删" 原数据。

  在Linux系统中,删除静态文件(没有进程调用)(目录也是文件)的条件是与之相关的全部硬连接文件均被删除。

17. Linux系统硬连接知识总结与实践 

  硬连接的建立:

  直接执行命令"ln  源文件  硬连接文件"便可完成建立硬连接。

  硬连接知识小结:

  1.  具备相同inode节点号的多个文件是互为硬连接文件。
  2.  删除硬连接文件或者删除源文件任意之一,文件实体并未被删除。
  3.  只有删除了源文件及全部对应的硬连接文件,文件实体才会被删除。
  4.  当全部的硬连接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收。
  5.  硬连接文件就是文件的另外一个入口(至关于超市的门前,后门同样)。
  6.  能够经过给文件设置硬连接文件,来防止重要文件被误删。
  7.  经过执行命令"ln  源文件  硬连接文件",便可完成建立硬连接。
  8.  硬连接文件能够能够用rm命令删除。
  9.  对于静态文件(没有进程正在调用的文件)来说,当对应硬连接数为 0(i_link),文件就被删除。i_link的查看方法(ls -l结果的第三列就是)

  建立硬连接命令:

  1.  # touch  oldboyfile
  2.  # echo "I am raymond linux" >oldboyfile
  3.  # cat  oldboyfile
  4.  # ls -l  oldboyfile
  5.  # ln oldboyfile  oldboyfile_hard_link  (显示硬连接数为2)
  6.  # rm -f  oldboyfile
  7.  # cat  oldboyfile_hard_link         (I am oldboy linux)
  8.  # cat oldboyfile         (显示:没有那个文件或目录)   找相同inode编号的多个文件。(例如:inode=141175)
  9.  # find / -type f |xargs ls -lhi | grep 141175  

18. linux系统文件删除原理深度讲解

  文件删除控制的变量。

  i_link文件的硬连接数量。

  i_count引用计数(有一个陈格许使用i_count+1)

  文件删除的条件:i_link=0 and i_count=0

19. linux系统文件删除原理答疑

  1.  被进程占用的文件能不能删?能
  2.  如何查看文件是否被进程占用或者看i_count 。
  3.  如何找回没有连接指向可是被进程占用的文件。

20. 企业生产场景文件删除问题案例准备

  企业案例:若是向磁盘写入数据提示以下错误:No space left on device,经过df -h 查看磁盘空间,发现没满,请问可能缘由是什么?

  解答:多是 inode数量被消耗尽了。

  1.  df -i 查看是否耗尽了inode数量。
  2.  企业工做中邮件临时队列/var/spool/clientmquene这里很容易被大量小文件占满致使No space left on device的错误。clientmquene目录只有安装了sendmail服务,才会有。 

    Centos5.8默认就会装sendmail,centos6.6默认没有sendmail。

       *保留视频实践知识。(多看)未了解 *****

21. 企业生产场景文件删除问题案例准备2

  # df  -h     磁盘分区信息命令

  # du  -sh     /(*)    查看根(/)分区目录文件的大小

22. 企业生产场景文件删除原理案例与inode案例

  企业案例:文件删除生产场景案例解决实战

  WEB服务器磁盘满故障深刻解析   (http://oldboy.blog.51cto.com/2561410/612351)     多看本视频,未了解    (*****)

23.  linux系统目录的硬连接知识介绍

  以点(.)开头的文件表明隐藏文件

  # ls  -a 显示隐藏文件        ls   -al     显示全部隐藏文件

  #每一个目录与目录下的点(当前目录)互为硬连接文件。因此目录有2个入口

24. 有关硬连接数的深度企业面试试题-学生问题

  若是一个目录含有8个硬连接数。说明该目录下含有一个当前目录(.)和7个目录文件里上一级目录(..)。

25.  Linux系统软连接知识及实践详解

  软连接(soft link)也称为符号连接(symbolic link),Linux里的软连接文件就相似于windows系统中的快捷方式。Linux里的软连接文件其实是一个特殊的文件,文件类型是I 。软连接文件实际上能够

  理解为一个文本文件,这个文件中包含有软连接指向另外一源文件的位置信息内容。所以,经过访问这个“快捷方式”就能够迅速定位到软连接所指向的源文件实体。

  建立软连接命令: # ln -s oldboyfile  oldboyfile_soft_link

26. Linux系统软连接核心知识7点小结

  执行命令 "ln  -s  源文件  软连接文件“ ,便可完成建立软连接。

  误区:建立软连接源文件是须要存在的,要建立的软连接文件是不能存在的,是要用ln命令建立的。

  软连接知识总结:

  1.  软连接类型windows的快捷方式(可经过readlink查看其指向)
  2.  软连接相似一个文本文件,里面存放的是源文件的路径,指向源文件实体。
  3.  删除源文件,软连接文件依然存在,可是没法访问指向的源文件路径内容了。
  4.  失效的时候通常是白字红底闪烁提示。  oldboy_soft_link_file  --> oldboy  -file  (红色区域)
  5.  执行命令" ln -s  源文件  软连接文件 " ,便可完成建立软连接(目标不能存在)
  6.  软连接和源连接是不一样类型的文件,也是不一样的文件。inode号也不相同。
  7.  删除软连接文件能够用rm命令。

27. 目录和文件的软硬连接知识实践

  看视频实践 

28. Linux系统文件连接核心知识7点小结

  有关文件的连接小结:

  经过以上的测试,咱们能够获得如下几个结论:

  1. 删除软连接oldboyfile_soft_link,对oldboyfile,oldboyfile_hard_link无影响。                全局结论:删除软连接文件对源文件及硬连接文件无任何影响。
  2. 删除硬连接oldboyfile_hard_link,对oldboyfile,oldboyfile_soft_link都无影响。     全局结论:删除硬连接文件对源连接及软连接文件无任何影响。
  3. 删除源文件oldboyfile,对硬连接oldboyfile_hard_link 没有影响,可是会致使软连接oldboyfile_soft_link失效。全局结论:删除源文件,对硬连接文件没有影响,可是会致使软连接文件失效,白字红底闪烁。
  4. 同时删除源文件源文件oldboyfile,硬连接文件oldboyfile_hard_link,整个文件会真正的被删除。
  5. 不少硬件设备中的快照功能,就是利用了硬连接的原理。
  6. 源文件和硬连接文件具备相同的索引节点号,能够认为是同一个文件或一个文件的多个入口。
  7. 源文件和软连接文件索引节点号不一样,是不一样的文件,软连接至关于源文件的快捷方式,含有源文件的位置指向。

29. Linux系统文件连接核心知识9点小结

  有关目录连接小结:

  1. 对于目录,不能够建立硬连接,但能够建立软连接。
  2. 对于目录的软连接是生产场景运维中经常使用技巧(例子第二关apache考试题)
  3. 目录的硬连接不能跨越文件系统(从硬连接原理能够理解)
  4. 每一个目录下面都有一个硬连接"."号,和对应上级目录的硬连接".."  。
  5. 父目录里建立一个子目录,父奴鲁的连接数增长1(子目录都有..来指向父目录)  ,可是在父目录里建立文件,父目录的连接数不会增长。

  企业面试题:描述Linux下软连接和硬连接的区别

  解答:在Linux系统中,连接分两种:一种被称为硬连接;另外一种被称为符号连接或软连接。

  1. 弄人不带参数状况下,ln命令建立的是硬连接,带-s参数的ln命令建立的是软连接。
  2. 硬连接文件与源连接的inode节点号相同,而软连接文件inode节点号与源文件不一样。
  3. ln命令不能对目录建立硬连接,但能够建立软连接,对目录的软连接会常常被用到。
  4. 删除软连接文件,对源文件及硬连接文件无任何影响。
  5. 删除文件的硬连接文件,对源文件及软连接文件无任何影响。
  6. 删除连接文件的源文件,对硬连接文件无影响,会致使其软连接失效。(红底白字闪烁状)
  7. 同时删除源文件及其硬连接文件,整个文件才会被真正的删除。
  8. 不少硬件设备中的快照功能,使用的就相似连接的原理。
  9. 软连接能够跨文件系统,硬连接不能够跨文件系统。

30. 有关软连接的生产使用案例实战讲解

  1. 软连接的生产使用案例: 咱们便宜apache软件时,编译路径带着版本号/application/apache2.2.21(为了区分版本用,所以路径比较大),而在访问目录时又但愿简便,此时就能够经过创建一个简单的软连接路径文件ln -s /application/apache2.2.21  /application/apache,来达到方便访问的目的。有关软连接的使用建议:生产状况尽量少或者说合理的建立软连接,不要过多的使用软连接,不然在数据进行迁移时会引发麻烦,软连接过多也会形成目录看起来很混乱。
  2. 企业生产目录软连接做用:

    a. 编译软件时指定版本号(/application/apache2.2.23),访问时但愿去掉版本号(/application/apache),能够设置软连接到编译的路径。全部程序都访问软连接文件(/application/apache),当软件升级高版              本后,只需删除连接文件重建到高版本路径的软连接便可(/application/apache)。

    b. 企业代码发布时(php程序),须要把全部代码传到一个新发布的临时目录或者新的站点目录。发布时要么一个mv,也能够重建软连接指向到这个新的临时目录挥着新的站点。

    c. 不方便目录移动,使用ln -s 。

31. 如何获取知识的源头

  1. Linux下经过mkdir命令建立一个新目录/oldboy/etc,它的硬连接数时多少,为何?
  2. 若是在/oldboy/etc目录下再常见一个目录,那么/oldboy/etc的硬连接数是多少,为何?

     解答1:硬连接数2个,查看方法为:ls -ld  /oldboy/etc

          这是由于: a. 建立的目录自己为一个硬连接。

                b. 新目录ett下的隐藏目录(点号)为建立的新目录的又一个硬连接 ,也算一个连接数。所以,硬连接数是2。

     解答2:硬连接数3个。

    经过上面的题,咱们发现ett目录的inode节点数字编号,和ett目录下的(.)点目录。 inode编号是同样的,而ett目录下的(..) 两个点和ett的上级目录oldboy的inode数字编号是同样的。

32. Linux文件属性之用户和用户组介绍

  用户的角色是经过UID和GID识别的。

  UID: User  Identify   用户ID,至关于各位的身份证,在系统中是惟一 的。

  GID: Group  Identify  组ID,至关于各位的家庭或者大家的学校。

  用户分为三类:

  a. 超级用户:root ( uid = 0 , gid = 0 , uid = 0 的用户就是超级用户)         # vi  /etc/passwd   (修改passwd文件,可更改uid,gid) 

  b. 虚拟用户: 它存在Linux中,知足文件或程序运行的须要而建立的。不能登录,不能使用,是傀儡。 uid-->gid  (1-->499)

  c. 普通用户:管理员root建立的用户,uid-->gid  (500-->65535)

     虚拟用户Linux安全优化:1. 安装系统后能够删除用不到的虚拟用户,但最好不删而是注释掉,万一回复过来。

                 2. 咱们本身部署服务的时候,也会建立虚拟用户,知足服务的需求:例如:apache, nginx, mysql, nfs, rsync, nagios, zabbix, redis

33. Linux文件属性之用户和用户组关系介绍

  用户和用户组的对应关系有:一对一,一对多,多对一和多对多。

  一对一:即一个用户能够存在一个组中,也能够是组中的惟一成员。如 root 。

  一对多:即一个用户能够存在于多个用户组中。

  多对一:多个用户能够存在于一个组中,这些用户具备和组相同的权限。

  多对多: 多个用户能够存在多个组中。而且几个用户能够归属相同的组。

34. Linux文件属性之用户和用户组的核心文件介绍 

  Linux系统下的帐户文件主要有/etc/passwd , /etc/shadow , /etc/group , /etc/gshadow文件

  1. /etc/passwd  用户的配置文件
  2. /etc/shadow       用户影子口令文件 
  3. /etc/group          用户组配置文件
  4. /etc/gshadow     用户组的影子文件 

35. Linux文件属性之用户组对应文件内容介绍

  1. passwd文件中一行的各个字段简述

           帐号名称  帐号密码  帐号UID  帐号组GID  用户说明  用户家目录  shell解释器

      root                   :x                   :0                    :0                 :root               :/root                  :/bin/bash  

  2. shadow文件中一行的各个字段详细说明

  字段名称        注释说明

  帐号名称        用户的帐号名称

  帐号密码        用户密码,这是加密的口令

  最近更改密码的时间      从1970年1月1日起,到用户最近一次更改口令的天数

  禁止修改密码的天数      从1970年1月1日起,到用户能够更改密码的天数

  用户必须更改口令的天数     从1970年月1日起,到用户必须更改密码的天数

  警告更改密码的天数     在用户密码过时前多少天提醒用户更改密码

  不活动时间            在用户密码过时以后到禁用帐户的天数

  失效时间               从1970年1月1日起,到用户被禁用的天数(useradd  -f)

  标志                                      保留

  3. group文件中一行的各个字段详细说明

    字段名称      注释说明

    用户组名                该组的名称

    用户组密码                  一般不须要设置该密码,因为安全缘由,该密码被记录在/etc/gshadow中,所以,显示为"X"。这相似/etc/shadow

     GID                             就是用户组的ID

     用户组成员             加入这个组的全部用户帐号

  4. gshadow文件中一行的各个字段详细说明

     用户组名      注释说明

     用户组密码             用户组密码,这个段能够是空的或!,若是是空的或有!。表示没有密码

    用户组管理源帐号         用户组管理者,这个字段也可为空,若是有多个用户组管理者,用,号分割

    用户主成员                    加入这个组的全部用户帐号,对表中多个用户经过“,” 分割

36. Linux系统文件属性之各种时间戳介绍

  # ls -l     显示的时间是修改时间      (文件名在上一级目录的block,删文件是产出上一级目录的block,block受上一级目录的权限控制)

  # ls -l      --time -style = long - iso    (显示友好的长格式时间为:2018-03-23)

  # stat    /etc/hosts     (显示文件的时间)(显示文件或文件系统的状态)

  1.  access:   访问时间    (find -atime)
  2.  modify:    修改时间,内容发生变化     (find   -mtime)
  3.  change:   变化时间,包含modify,权限,属主,用户组都发生改变(find   -ctime) 

37. Linux正则表达式介绍(*****) 

  什么是正则表达式?

  简单的说,正则表达式就是为助理大量的字符串而定义的一套规则和方法。

  例如:假设“@”表明oldboy,“!”表明oldgirl。   echo  "@!"==" oldboyoldgirl "

  经过定义的这些特殊符号的辅助,系统管理员就能够快速过滤,替换或输出须要的字符串。

  Linux正则表达式通常以行为为单位处理的。

  Linux正则表达式只针对命令三剑客 (grep , egrep , awk, sed)

38. 为何要使用正则表达式

  在企业工做中,咱们天天作的Linux运维工做中,时刻都会面对大量带有字符串的文本配置、程序。命令输出及日志文件等。而咱们常常会有迫切的须要,从大量的字符串内容中查找符合工做须要的

  特定的字符串。这就要靠正则表达式。所以,能够说正则表达式就是为过滤这样字符串的需求而生的!

  例如:ifconfig的输出取IP 。    例如:cat  /var/log/message输出等。

39. 使用正则须要注意的若干问题事项 

  容易混淆的两个注意事项:

  a. 正则表达式应用很是普遍,存在于各类语言中。例如:php, python,java等。可是,咱们今天将的是Linux系统运维工做中的正则表达式。即Linux正则表达式,最常应用正则表达式的命令就

   grep (egrep),sed,awk换句话说Linux三剑客要想能工做的更高效,那必定离不开正则表达式配合的。

  b. 正则表达式和咱们经常使用的通配符特殊字符是有本质区别的。

  例子: ls *.log这里的*就是通配符(表示全部),正则表达式的*表示。重复前面的一个字符的0次或屡次。

  注意事项:

  a. linux正则通常以行为单位匹配处理。

  b. alias grep = 'grep --color = auto',讲课是以grep为例(能够看到匹配颜色)

  c. 注意字符集: (export  LC_ALL=C)

      咱们要想玩好三剑客,首先就要掌握正则表达式  (找大量例子练习),Linux里正则表达式,主要是awk,sed,grep(egrep)三剑客的正则表达式。

40. Linux基础正则表达式实战讲解1

  实战准备:

  1.  调整别名 : # alias  grep = 'grep  --color = auto'  

  2. 注意字符集可能带来的问题: # export   LC_ALL = C

     基础正则表达式

  a. ^word  搜索以word开头的。      vi  ^一行的开头

  b. word$  搜索以word结尾的。     vi  $一行的开头

  c. ^$    表示空行,能理解么?

  例: # grep "^m"  a.txt   (过滤以m开头的整行)

     # grep "m$"  a.txt   (过滤以m结尾的整行)

     # grep  -v "^$" a.txt   (过滤(去掉)空行所剩下的内容)

41. Linux基础正则表达式实战讲解2

  d.  .  点表明且只能表明任意一个字符。

  e.  \  例\.就表明点自己,转义符号,让有着特殊身份意义的字符脱掉马甲,还原原型。

   f.  *  例0*重复0个或多个前面的一个字符。

  g.  .*  匹配全部字符。延伸^.*以任意多个字符开头。*¥ 以任意多个字符结尾。

   例: # grep "."  a.txt    (匹配全部内容,空行除外)

      # grep ".*" a.txt         (匹配全部内容,包括空行)

      # grep "raymo.d"  raymond.txt  (匹配raymo.d,点号表明任一字符)

      # grep "\.$"  raymond.txt     (匹配以点(.)结尾的行的内容)

      # grep "0* "  raymond.txt    (匹配以0开头的相同的字符串)

42. Linux 基础正则表达式实战讲解3

  h. [abc]   匹配字符集合内的任意一个字符[a-z A-Z],[0-9]

  i.  [^abc]  匹配不包含^后的任意字符的内容,中括号例^为取反,注意和...开头区别。

  j. a\{n,m\}重复n到m次,前一个重复的字符。若是用egrep/sed  -r  能够去掉斜线。

           \{n,\}重复至少n次,前一个重复的字符。若是用egrep/sed  -r 能够去掉斜线。

  注意:egrep或sed  -r  过滤通常特殊字符能够不转义。

43. Linux核心命令grep多个参数总结

  grep通常经常使用参数:

  -a: 在二进制文件中,以文本文件的方式搜索数据。

  -c: 计算找到 ‘搜索字符串’ 的次数。

  -o: 反显示出匹配regxp的内容(用于统计出如今文中的次数)

  -i : 忽略大小写的不一样,因此大小写视为相同                  *****

  -n: 在行首显示行号                                                         *****

  -v: 反向选择,即显示没有‘搜索字符串’ 内容的那一行    *****

  -E: 扩展的grep,即egrep              *****   

       --color=auto : 以特定颜色高亮显示匹配关键字               ***

  提示: -i , -v为经常使用参数

  -A:  After的意思,显示匹配字符串及其后几行的数据。

  -B: Before的意思,显示匹配字符串及其前几行的数据。

  -C: 显示匹配字符串及其先后各num 行。

44. 企业生产场景sed配合正则应用案例1

  例:#ifconfig eth0      (取命令所打印出来的IP地址)

   解答:1. #ifconfig  eth0 | sed  -n 'ip' | sed  -r  ' s# .*addr:##g ' | sed ' s#Bc.*$##g '

      2. # ifconfig eth0 | sed  -n 'ip' | sed ' s#^.*dr: ##g ' | sed ' s#B.*$##g '

45. 企业生产场景sed配合正则应用案例2

  以44节例题为例 (取命令ifconfig eth0 打印内容中的IP字符串)

  解答:a. # ifconfig eth0 | sed -n 'ip' | sed -r ' s#^.*dr:(.*)  Bc.*$#\1#g '

        b. # ifconfig  eth0 | sed -nr ' 2s#^.*dr:(.*)  Bc.*¥#、1#gP '

相关文章
相关标签/搜索