第三部

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 '

  

   

  

  

Linux运维笔记--第三部的更多相关文章

  1. 重磅分享:美团点评架构师私藏的内部Linux运维笔记

    最近不少小伙伴后台联系,希望能弄一些大厂的学习资料,我这边费了很大劲,联系到老朋友,原美团点评架构师张sir,问他要了些美团点评架构的内部资料. 这份资料含金量非常高,包含整个美团点评架构架构图,Li ...

  2. Linux运维笔记-日常操作命令总结(2)

    回想起来,从事linux运维工作已近5年之久了,日常工作中会用到很多常规命令,之前简单罗列了一些命令:http://www.cnblogs.com/kevingrace/p/5985486.html今 ...

  3. Linux运维笔记-日常操作命令总结(1)

    在linux日常运维中,我们平时会用到很多常规的操作命令. 查看服务器的外网ip [root@redis-new01 ~]# curl ifconfig.me [root@redis-new01 ~] ...

  4. Linux运维笔记--第二部

    第2部-重要目录结构详解 1.回顾Linux目录结构知识 /dev/            设备目录 /etc/             系统配置及服务配置文件,启动命令的目录 /proc       ...

  5. Linux运维笔记--第一部

                                 CentOS 学习总结                                                             ...

  6. Linux运维笔记-日常操作命令总结(3)

    文本操作:sed sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作. sed命令行格式为: sed [-nefri] ‘c ...

  7. linux运维笔记——常用命令详解diff

    1.diff 你可以把diff看成是linux上的文件比对工具 例子文件内容: [root@localhost disks]# cat test1.txt a b c d [root@localhos ...

  8. Linux 运维笔记

    #配置静态地址网卡DEVICE="eth0"BOOTPROTO=staticHWADDR="00:0C:29:DC:EA:F7"NM_CONTROLLED=&q ...

  9. Linux运维笔记(一)网络基础知识

    网络基础知识 一.基本概念 1.ARPANET & TCP/IP:以“软件”技术将网络硬件整合,使得不同的计算机或者数据可以通过这个软件达成数据沟通(TCP/IP技术也被称为Internet) ...

随机推荐

  1. Spark history server 遇到的一些问题

    最近学习Spark,看了一个视频,里面有提到启动spark后,一般都会启动Spark History Server.视频里把 spark.history.fs.logDirectory 设置成了Had ...

  2. poj 3417 Network(tarjan lca)

    poj 3417 Network(tarjan lca) 先给出一棵无根树,然后下面再给出m条边,把这m条边连上,然后每次你能毁掉两条边,规定一条是树边,一条是新边,问有多少种方案能使树断裂. 我们设 ...

  3. 省选准备 MISTAKE 大全

    2019-03-29 [NOI2016]网格 如果是矩形,要记得考虑n或m=1的情况,不要潜意识里就以为矩形就是接近正方形的那种理想矩形. 写bool型的函数,return 的语句要想清楚,不要放错位 ...

  4. Spring JdbcTemplate详解及项目中的运用

    1.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...

  5. [Leetcode] 002. Add Two Numbers

    https://leetcode.com/problems/add-two-numbers/ public class Solution { public ListNode addTwoNumbers ...

  6. BZOJ-3555:企鹅QQ(字符串哈希)

    PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体验,满足用 ...

  7. Codeforces Round #431 (Div. 2) A

    Where do odds begin, and where do they end? Where does hope emerge, and will they ever break? Given ...

  8. js window对象属相和方法相关整理资料

    window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval mov ...

  9. Net Core下通过Proxy 模式

    Net Core下通过Proxy 模式 NET Core下的WCF客户端也是开源的,这次发布.NET Core 2.0,同时也发布了 WCF for .NET Core 2.0.0, 本文介绍在.NE ...

  10. Nginx中的Rewrite的重定向配置与实践

    阅读目录 一:理解地址重写 与 地址转发的含义. 二:理解 Rewrite指令 使用 三:理解if指令 四:理解防盗链及nginx配置   简介:Rewrite是Nginx服务器提供的一个重要的功能, ...