Linux运维笔记--第三部

时间:2023-11-22 08:12:32

第三部

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

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

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

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

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

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

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

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

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

  第7、8、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 '