一、 用户

  在Linux系统中,可以创建多个用户,每一个用户都有一个与其对应的ID号,就像每一个人都有一个×××号一样,这就是用户的UID,
  在Linux中管理员 root的默认UID为0,普通用户为1-65535,而普通用户又分为系统用户和登录用户,系统用户是不可登录的,对守护进程获取资源进行权限分配使用,其默认UID是1-499(在centos7中是1-1000),普通用户的UID为500-65535(centos7中为1000-65535)

 1、 用户及其属性信息

  /etc/passwd
关于Linux,用户,组,权限,文本处理工具,正则表达式,vim文本编辑器_第1张图片
   例:root:x:0:0:root:/root:/bin/bash
    以:分隔
    root 用户名(普通用户或系统用户或组名)
    x 用户的密码(映射到etc/shadow)
    0 UID 用户的ID号
    0 GID用户所属组的ID号(主组,私有组)
    root 用户所属组组名
      /root 用户的家目录
      /bash 用户的登录shell(/bash:表示可登录用户,/nologin:表示不可登录用户)
   /etc/shadow
关于Linux,用户,组,权限,文本处理工具,正则表达式,vim文本编辑器_第2张图片   root:$6$4a0qWypn588Lf5ey$pCPLZaQa0bt/SEUnWVczNwxlA1xsjW2UrPnjsS2RXumSqDUtJaNe.qB7oNoGEI.zZmFt/644AmKLV.yB4Rs6L/:17540:0:99999:7:::
   以:分隔
   Root:用户名
  6 : sha512加密
  4a0qWypn588Lf5ey:加密算法数据
  pCPLZaQa0bt/SEUnWVczNwxlA1xsjW2UrPnjsS2RXumSqDUtJaNe.qB7oNoGEI.zZmFt/644AmKLV.yB4Rs6L/:这一串字符是加密后的数据
   17540:从1970年1月1日起到密码最近一次被更改的时间
    0:密码再过几天可以被变更,0表示随时可被变更
   99999:密码再过几天必须被变更,99999表示永不过期
   7:密码过期前几天系统提醒用户,默认是7天,一周
   倒数第三位:密码过期几天后被锁定
   倒数第二位:从1970年1月1日算起,多少天后账号失效
   最后一位:为扩展而有的,目前没意义

 2、 用户管理命令

  1.用户创建:useradd(adduser)

   语法:useradd 选项 参数 用户名
    -u UID :指定uid默认从1000开始往后
    -o :与 -u 配合,不检查UID的唯一性(用于所创建的用户UID已被使用的情况下)
    -g GID或组名: 指定用户的主要组为某个已存在的组,可以指定GID也可以指定组名
    -G :指定附加组 以逗号为间隔可以同时指定多个,组必须事先存在,可以指定GID也可以指定组名。
    -c “...”:注释信息
    -d 用户家目录:指定用户家目录,如不指定默认在/home下与用户同名。指定时注意,目录名需已存在,基名不存在。
    -s shell:指定登录shell如下
    useradd -s /sbin/nologin test 创建shell为不可交互式登录的用户
    -N :不创建私用组做主组,默认使用UID为100的组为主组
    -r :创建系统用户 (centos 6及之前的版本 < 500, centos 7 < 1000)

  2.用户密码的修改passwd

   语法:passwd 选项 (用户名指定要修改密码的用户名,仅在root运行时,不用输入原密码,可直接更改,)
     -l 锁定用户 实际就是在密码位前加!!
     -u 取消用户锁定
     -e 强制用户下次登录时更改密码
     -n mindays: 指定最短使用期限
     -x maxdays:最大使用期限
     -w warndays:提前多少天开始警告
     -i inactivedays:非活动期限
     --stdin 从标准输入接收用户密码

  3.更改密码的默认设置

    chage 选项 用户名
     -d 日期:上一次的更改日期(LAST_DAY)
     -E 具体日期(例:2017-09-08) : 账户过期过期时间过了这天,账户将不可用(expiredate EXPIRE_DATE)
     -I 天数 : 密码过期几天后此账户将不可用 (inactive INACTIVE)
     -m 天数 :密码的最小存活期(mindays MIN_DAYS)
     -M 天数:密码的最大存活期(maxdays MAX_DAYS)
     -W 天数:密码过期前,提前警告的信息的天数(--warndays WARN_DAYS)
     –l 显示密码策略
 例:
     chage -d 0 tom 下一次登录强制重设密码
     chage -m 0 –M 42 –W 14 –I 7 tom 更改tom的密码的最小存活期为0天,最大存活期为42天,在过期前14天提示警告的信息,过期7天后账户不可用
     chage -E 2016-09-10 tom 当到了这一天时账户不可用

  4.用户属性修改

   Usermod 选项 参数 用户名
    -u UID:新UID
    -g GID: 新主组
    -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的 附加组将会被覆盖;若保留原有,则要同时使用-a选项
    -a 与-G 结合 使用可以增加用户的附加组,而不会影响之前的附加组
    -s SHELL:新的默认SHELL
    -c 'COMMENT':新的注释信息
    -d HOME: 新家目录不会自动创建;若要创建新家目录并移 动原家数据,同时使用-m选项
     -l login_name: 修改用户名;
     -L: lock指定用户,在/etc/shadow 密码栏的增加 ! 相当于passwd -l
     -U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
     -e YYYY-MM-DD: 指明用户账号过期日期
     -f INACTIVE: 设定非活动期限

  5.用户的删除

     Userdel 选项 用户名
      -r:删除用户的家目录,

  6.查看用户相关的ID信息

    ID 选项 用户名
     -u: 显示UID
     -g: 显示GID
     -G: 显示用户所属的组的ID
     -n: 显示名称,需配合ugG使用

  7.用户切换

   su [options...] [-] [user [args...]]
   切换用户的方式:
     su UserName:非登录式切换,即不会读取目标用户的 配置文件,不改变当前工作目录
     su - UserName:登录式切换,会读取目标用户的配置 文件,切换至家目录,完全切换
   root su至其他用户无须密码;
   非root用户切换时需要密码
   换个身份执行命令: su [-] UserName -c 'COMMAND'
选项:  -l –login
     su -l UserName 相当于 su – UserName

  8. 手工创建家目录的方法

            mkdir /home/machao
            chmod 700 /home/machao/
            cp -r /etc/skel/.[^.]*  /home/machao/
            chown -R machao.machao /home/machao  

二、组

 组是为了方便对普通用户的权限的管理,组内成员平等而独立

 1、 Linux组的类别

   用户的主要组(primary group):
   用户必须属于一个且只有一个主组
   组名同用户名,且仅包含一个用户:私有组
   用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组

 2、 用户和组的配置文件

  1./etc/passwd:用户及其属性信息(名称、UID、主组ID等)

   /etc/group:组及其属性信息
关于Linux,用户,组,权限,文本处理工具,正则表达式,vim文本编辑器_第3张图片
     群组名称:就是群组名称
     群组密码:通常不需要设定,密码是被记录在/etc/gshadow
     GID:就是群组的ID
     以当前组为附加组的用户列表(分隔符为冒号)
   /etc/shadow:用户密码及其相关属性
   /etc/gshadow-:组密码及其相关属性
    组名
    组密码
    管理员:更改组密码和成员
    组成员:功能同/etc/group中的第四列

  2.pwconv 将passwd当中的密码映射到了/etc/shadow

    pwunconv 取消映射,密码仍然放在/etc/passwd当中
    grpconv 将组密码映射到了/etc/gshadow
    grpunconv 取消组密码的映射

  3.vipw = vim /etc/passwd

   vipw -s = vim /etc/shadow
   vigr = vim /etc/group
   vigr -s = vim /etc/gshadow
   pwck 检查/etc/passwd语法
   grpck 检查/etc/group语法

  4. /etc/default/useradd 创建用户的默认配置文件

关于Linux,用户,组,权限,文本处理工具,正则表达式,vim文本编辑器_第4张图片
GROUP=100 :表示使用useradd -N时默认使用的组为GIP为100的组
HOME=/home: 自动创建家目录时,从哪个目录下创建与用户同名的家目录
INACTIVE=-1 :用户是否设置密码过期后,多少天帐户过期,为-1时,不会触发帐户过期
EXPIRE= :是否指定一个帐户过期时间,为空表示帐户默认永不过期
SHELL=/bin/bash: 使用useradd创建用户时,如不使用-s 指定则默认的用户shell为/bin/bash
SKEL=/etc/skel :自动创建家目录时,从哪个目录拷贝模板文件
CREATE_MAIL_SPOOL=yes : 创建用户时是否在/var/spool/mail下为用户与用户同名的邮箱文件。

 3、 创建组

   groupadd 选项 参数 groupname
     -g GID:指明GID号;
 -r :创建系统组

 4、组修改

  Groupmod 选项 参数 groupname
    -n newname 组名:修改组名
    -g newGID:修改组ID

 5、设置组密码及组的管理

   1.Gpasswd 组名 设置组密码

   管路员可以执行:
    -a 用户名 组名:将某用户以附加组方式加入某组中,
    -d 用户名 组名:将某用户从指定组踢出
仅root执行
    -M用户名[,用户名…] 组名:设置某组的用户列表
    -A 用户名[,用户名…] 组名:设置某组的管理员列表
(管理员在不是组成员的情况下,仅能修改密码,和将其他人加入和踢出组,并不具有组成员的权限)
(newgrp 组名 “普通用户执行”,非附加组成员的普通用户在正确输入组密码后可以使用该命令临时变更主要组)
(附加组成员的普通用户无需输入密码可以使用该命令临时变更主组,原主组临时变成附加组)

  2.Groupmems -g 组名 选项 用户名 (仅root执行)

            -g 组名 -a 用户名:将某用户以附加组方式加入到某组中
            -g 组名 -d 用户名:将某用户从指定组踢出
            -g 组名 -p 清空所有成员
            -g 组名 -l 查看指定组有哪些成员(仅显示附加组)

  3.groups 用户名 查看用户属于哪些组(包含主组和附加组,普通用户也可用)

  4.组删除 groupdel

   Groupdel 组名:删除组

三、 文件权限

 1、 文件属性

关于Linux,用户,组,权限,文本处理工具,正则表达式,vim文本编辑器_第5张图片

 2、 修改文件的属主和属组

  1.文件的权限主要针对三类对象进行定义:

    owner: 属主, u
    group: 属组, g
    other: 其他, o

  2.修改文件的属主 chown(仅root才能更改文件所属人)

          Chown 选项 owner:group filename(:和.可以互换着用)
               -R:递归修改目录下所有文件
               Owner  只修改属主
               Owner.group或owner:group 同时修改属主和属组
               :group或.group 只修改属组(.或:不能省略)
                --reference=file1 file2 将file1的group信息复制给file2

  3.使用chgrp修改文件的group(文件的owner可以使用chgrp更改文件的group,前提是owner一定要属于目标group)

            Chgrp 组名 filename
             -R 递归
             --reference=file1 file2 将file1的group信息复制给file2

 3、权限设置

  1.每个文件针对每类访问者都定义了三种权限:

    r: Readable 可读
    w: Writable 可写
    x: eXcutable 可执行
   文件:
    r: 可使用文件查看类工具获取其内容
    w: 可修改其内容
    x: 可以把此文件提请内核启动为一个进程
   目录:
    r: 可以使用ls查看此目录中文件列表
    w: 可在此目录中创建文件,也可删除此目录中的文件
    x: 可以使用ls -l查看此目录中文件列表,可以cd进入此
   目录 X:只给目录x权限,不给文件x权限

  2.当rwx分别或组合作用在文件上时

   当仅r权限作用在文件上的时候,用户可以读取该文件的内容:cat less more head tail
   当仅w权限作用在文件上的时候,用户可以修改文件的内容:>>
   当仅x权限作用在文件上的时候,无作为.
   当rw权限作用在文件上的时候,用户即能读与能修改:cat less more head tail vim nano > >>
   当rx权限作用在文件上的时候,用户可以执行该文件
   当wx权限作用在文件上的时候,权限等同于仅w权限.
   文件的常见权限是r-- rw- rwx

  3.当rwx分别或组合在目录上时

   当仅r权限作用在目录上的时候,用户可以短列出目录下的文件名.
   当仅w权限作用在目录上的时候,无作为.
   当仅x权限作用在目录上的时候,用户可以进入该目录,并且在知道具体文件名且具有相关权限的情况下,可以访问子文件.
   当rw权限作用在目录上的时候,权限等同于仅r权限
   当rx权限作用在目录上的时候,用户进入,长列出.
   当wx权限作用在目录上的时候,用户可以进入且可以创建及删除文件.但不能使用文件名通配符
   目录的常见权限r-x rwx

  4.rwx权限项的表示方式

   字母 二进制 八进制
    ---   000   0
    --x   001   1
    -w-  010   2
    -wx  011   3
    r--   100   4
    r-x  101   5
    rw-  110   6
    rwx  111   7

  5.修改文件权限 chmod

   Chmod 选项 权限 filename
    -R:递归
     --reference file1 file2: 将file1的权限复制给file2
   权限表达式:
    u/g/o/a= :指定给u,g,o或全部的权限
    u/g/o/a+ :给u,g,o或全部添加某个权限
    u/g/o/a- :给u,g,o或全部减去某个权限
(当使用a给全部加x权限时,只给目录及已有部分x权限的文件加上x权限,不给三个权限位完全没有x权限的文件加x权限)

四、 特殊权限

 1、 前提:进程有属主和属组;文件有属主和属组

  1.任何一个可执行程序文件能不能启动为进程,取决发起者 对程序文件是否拥有执行权限

  2.启动为进程之后,其进程的属主为发起者,进程的属组为 发起者所属的组

  3.进程访问文件时的权限,取决于进程的发起者

   (a) 进程的发起者,同文件的属主:则应用文件属主权限
   (b) 进程的发起者,属于文件属组;则应用文件属组权限
   (c) 应用文件“其它”权限

 2、 三种常用的权限:r, w, x user, group, other

  三种不常用的特殊权限:SUID, SGID, Sticky

 3、 SUID 权限

  任何一个可执行程序文件能不能启动为进程:取决发起者对 程序文件是否拥有执行权限。
  启动为进程之后,其进程的属主为原程序文件的属主
  SUID只对二进制可执行程序有效
  SUID设置在目录上无意义

  1.权限设定:

   chmod u+s 文件路径 :给某个二进制文件添加SUID权限
   chmod u-s 文件路径 :给某个二进制文件减去SUID权限

  2.SUID 权限的作用

任何一个可执行程序文件能不能启动为进程:取决发起者对 程序文件是否有执行权限
启动为进程之后,其进程的属主为原程序文件的属主

 4、 SGID权限

  1. 当SGID 作用在一个二进制程序上时

   (1)SGID 的作用

    任何一个可执行程序文件能不能启动为进程:取决发起者对 程序文件是否拥有执行权限
    启动为进程之后,其进程的属主为原程序文件的属组

   (2)权限设定

    Chmod g+s 文件路径
    Chmod g-s 文件路径

  2.当SGID作用在一个目录上时

   (1) SGID的作用

    默认情况下,用户创建文件时,其属组为此用户所属的主组
    一旦某目录被设定了SGID,则对此目录有写权限的用户在此 目录中创建的文件所属的组为此目录的属组
    通常用于创建一个协作目录

   (2) 权限设定

    chmod g+s 目录路径 :给某个目录添加SGID 权限
    chmod g-s 目录路径:给某个目录上SGID权限取消

 5、 Sticky位

  具有写权限的目录通常用户可以删除该目录中的任何 文件,无论该文件的权限或拥有权
  在目录设置Sticky 位,只有文件的所有者或root可 以删除该文件 sticky
  设置在文件上无意义
  权限设定:
   chmod o+t 目录路径
   chmod o-t 目录路径

 6、 特殊权限数字法

关于Linux,用户,组,权限,文本处理工具,正则表达式,vim文本编辑器_第6张图片
   例:chmod u+s =chmod 4xxx
    Chmod g+s=chmod 2xxx
    Chmod o+t=chmod 1xxx
    即有suid又有sgid 6xxx
    即有suid又有sticky 5xxx
    即有sgid又有Sticky 3xxx
    全有7xxx
(权限位原本有x(执行权限)的,加上特殊权限后,显示为小写,原本没有,显示为大写)

 7、 文件特定权限

   Chattr +a 文件路径 :不能删除,不能改名,不能修改,可以追加
   chattr +i 不能删除,不能改名,不能修改,不能追加
   lsattr 查看文件特定权限

 8、 权限的优先级

   owner > acl user > group 与 acl group 谁的权限多,谁优先 > other

 9、 umask,用户新建文件或目录时的默认权限

   umask值 可以用来保留在创建文件权限
   新建文件权限: 666-umask
   如果所得结果某位存在执行(奇数)权限,则将其权限+1
   新建目录权限: 777-umask
   非特权用户umask是 002
   root的umask 是 022
   umask:查看当前用户的umask值
   umask #:设定当前用户的umask值,(临时,当切换用户再切换回来时会失效)
   umask –S :以u/g/o=rwx显示当前用户的umask值,后跟具体值也可以更改用户umask值
   umask -p:输出可被调用,
   全局设置: /etc/bashrc
   用户设置:~/.bashrc

五、 Acl扩展访问列表

   ACL:Access Control List,实现灵活的权限管理
   除了文件的所有者,所属组和其他人,可以对更多的用户设置权限
   centos7中的所有文件系统以及Centos6随着操作系统安装是划分的文件系统均已默认开启acl。

 1、 centos6当中对新建分区开启acl的过程

  1. 创建分区

   fdisk /dev/sda
     n 回车
     回车
    +2G回车
    W回车

  2.同步分区表

   partx -a /dev/sda

  3.创建文件系统

   mkfs.ext4 /dev/sda6

  4.开启acl支持

   tune2fs -o acl /dev/sda6

  5.查看acl

   tune2fs -l /dev/sda6 |grep option

 2、访问控制列表的设置

   为多用户或者组的文件和目录赋予访问权限rwx (通过ACL赋予目录默认x权限,目录内文件也不会继承x权限)
   setfacl -m u:用户名:rwx 目录路径 给某个文件或目录添加一条acl user的权限
   setfacl -Rm g:sales:rwX directory 递归
   setfacl -M file.acl file|directory 提前写一个acl的文件,然后把文件的acl设置赋给该文件或目录
   setfacl -m g:salesgroup:rw file| directory给某个文件或目录添加一个acl group的权限
   setfacl -m d:u:wang:rx directory
   setfacl -x u:wang file |directory 删除一条acl
   setfacl -X file.acl directory删除赋给某个文件或目录的acl文件
   setfacl -m m:r-x file |directory 设置上限阀值 或chmod g=r-x
   setfacl -d -m u/g:username/groupname file |directory 设置默认权限
   setfacl -k file |directory 清除默认acl权限
   setfacm -b file |directory 清除所有acl属性
   mount -o acl /directory

 3、 Getfacl 查看特殊权限

关于Linux,用户,组,权限,文本处理工具,正则表达式,vim文本编辑器_第7张图片
   ACL文件上的group权限是mask 值(自定义用户,自定义组 ,拥有组的最大权限),而非传统的组权限

 4、 Mask

   mask只影响除所有者和other的之外的人和组的最大权限 Mask需要与用户的权限进行逻辑与运算后,才能变成有限的 权限(Effective Permission)
   用户或组的设置必须存在于mask权限设定范围内才会生效
   setfacl -m mask::rx file
   --set选项会把原有的ACL项都删除,用新的替代,需要注 意的是一定要包含UGO的设置,不能象-m一样只是添加 ACL就可以
     setfacl --set u::rw,u:wang:rw,g::r,o::- file1

 5、 备份和恢复ACL

   getfacl -R /tmp/dir1 > acl.txt 把文件的acl生成一个ACL表文件,保存起来
   setfacl -R -b /tmp/dir1 清空文件上所有的acl属性
   setfacl --restore acl.txt 加载 acl文件
   getfacl -R /tmp/dir1 查看特殊权限

六、 文本处理工具

 1、 Cat文件查看命令

   cat 选项 文件路径
    -E: 显示行结束符
    -n: 对显示出的每一行进行编号
    -A:显示所有控制符
    -b:非空行编号
    -s:压缩连续的空行成一行
    -v 显示^M
    -T 显示^I即tab

 2、 more:分页查看工具

   more 选项 文件路径
    -d :显示翻页及退出提示

 3、 less 一页一页地查看文件或STDIN输出

   查看时有用的命令包括: /
   文本 搜索 文本
   n/N 跳到下一个 或 上一个匹配
   less 命令是man命令使用的分页器

 4、 head

   head 选项 文件路径(n代表一个数字)
     -c n :显示前n个字节
     -n n:显示前n行
     -n:显示前n行

 5、 tail

   tail 选项 文件路径
    -c n:显示文件倒数n字节
    -n n: 显示文件内容倒数n行
    -n : 显示文件内容倒数n行
    -f:动态显示,实时显示文件新添加的内容,常用日志监控

 6、 cut

   cut 选项 文件路径
    -d : :指定分隔符为:,默认tab
    -f 列数:显示指定的第几列,也可以跟多个列数
     N :第n列
     1,3,6:离散的多个列
     1-4:连续的多个列,
    -c n:按字符切割,显示第n个字符那一列
    --output-delimiter=STRING指定输出分隔符

 7、 paste 合并两个文件的内容同时显示,行号相同的在同一行显示

   paste 选项 file1 file2
    -d分隔符:指定分隔符,默认用tab
    -s:所有行合成一行显示
     Paste file1 file2
    paste -s f1 f2

七、 分析文本的工具

 1、 收集文本统计数据wc

   计数单词总数、行总数、字节总数和字符总数
   可以对文件或STDIN中的数据运行
   wc 文件路径:显示该文件的行数,字数,字符数以及文件名
    -l:只计数行数
    -w:只计数单词总数
    -c:只计数字节总数
    -m:只计数字符总数

 2、文本排序sort

  把整理过得文本显示在终端上,不改变原始文件的
  Sort 选项 文件路径
   -r :执行反方向(由上至下)整理
   -n :执行按数字大小整理
   -f :忽略(fold)字符串中的字符大小写
   -u :(独特,unique)删除输出中的重复行
   -t c :使用c做为字段界定符
   -k X :按照使用c字符分隔的X列来整理能够使用多次

 3、 Unip

   从输入中删除前后相接的重复的行
   Unip 选项 文件路径
    -c显示每行重复出现的次数
    -d: 仅显示重复过的行
    -u: 仅显示不曾重复的行 (连续且完全相同方为重复)
   常和sorrt命令一起使用
    Sort userlist.txt | unip -c

 4、 比较文件diff

   比较两个文件之间的区别,不同之处
    Diff file1 file2
关于Linux,用户,组,权限,文本处理工具,正则表达式,vim文本编辑器
   注明第6行不一样
   diff 命令的输出被保存在一种叫做“补丁”的文件中
   使用 -u 选项来输出“统一的(unified)”diff格式文 件,最适用于补丁文件。
   diff -u foo.conf-broken foo.conf-works > foo.patch
   patch 复制在其它文件中进行的改变(要谨慎使用)
   使用 -b 选项来自动备份改变了的文件
     patch -b foo.conf-broken foo.patch

八、 文本处理命令

   Grep :文本过滤工具
   Sed:文本编辑工具
   Awk:文本报告生成器

 1、 grep文本过滤工具

   grep,egrep,fgrep(不支持正则表达式搜索)
    egrep=grep -E
   作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查,打印匹配到的行
   模式:由正则表达式字符及文本字符所编写的过滤条件
    grep root /etc/passwd 在该文件中搜索有root的行并显示
    grep "$USER" /etc/passwd 使用正则表达式时要用“”或‘’引起来,表示不是匹配这段字符,而是匹配正则表达式的结果,或在表达式前加\也可以
    grep '$USER' /etc/passwd
    grep `whoami` /etc/passwd 在文本中搜索命令结果的行
   grep 选项 参数 文件路径
    --color=auto: 对匹配到的文本着色显示
    -v: 显示不被pattern匹配到的行
    -i: 忽略字符大小写
    -n:显示匹配的行号
    -c: 统计匹配的行数
    -o: 仅显示匹配到的字符串
    -q: 静默模式,不输出任何信息
    -A #: after, 后#行
    -B #: before, 前#行
    -C #:context, 前后各#行
    -e:实现多个选项间的逻辑or关系 grep –e ‘cat ’ -e ‘dog’ file
    - w:匹配整个单词
    - E:使用ERE
    - F:相当于fgrep,不支持正则表达式

九、 正则表达式

  Regexp正则表达式,:由一类特殊字符及文本字符所编写的模式,其中有 些字符(元字符)不表示字符字面意义,而表示控制或通配 的功能
  程序支持:grep,sed,awk,vim, less,nginx,varnish等
  正则表达式分为两类,
   基本正则表达式:BRE
   扩展正则表达式:ERE
元字符分类:字符匹配、匹配次数、位置锚定、分组

 1、 字符匹配

  . 匹配任意单个字符
  [] 匹配指定范围内的任意单个字符
  [^] 匹配指定范围外的任意单个字符
  [:alnum:] 字母和数字
  [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
  [:lower:] 小写字母
  [:upper:] 大写字母
  [:blank:] 空白字符(空格和制表符)
  [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
  [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
  [:digit:] 十进制数字
  [:xdigit:]十六进制数字
  [:graph:] 可打印的非空白字符
  [:print:] 可打印字符
  [:punct:] 标点符号

 2、 匹配次数:用在指定次数的字符后面,用于指定前面的字符出现的次数

  \ 匹配前面的字符任意次,包括0次
   贪婪模式:尽可能长的匹配
  .
任意长度的任意字符
  \? 匹配其前面的字符0或1次
  \+ 匹配其前面的字符至少1次
  \{n\} 匹配前面的字符n次
  \{m,n\} 匹配前面的字符至少m次,至多n次
  \{,n\} 匹配前面的字符至多n次
  \{n,\} 匹配前面的字符至少n次

 3、 位置锚定:定位出现的位置

  ^ 行首锚定,用于模式的最左侧
  $ 行尾锚定,用于模式的最右侧
  ^PATTERN$ 用于模式匹配整行
   ^$ 空行
   ^[[:space:]]*$ 空白行
  \< 或 \b 词首锚定,用于单词模式的左侧
  \> 或 \b 词尾锚定;用于单词模式的右侧
  \ 匹配整个单词

 4、 分组

  () 将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:(root)+
  分组括号中的模式匹配到的内容会被正则表达式引擎记录于 内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
  \1 表示从左侧起第一个左括号以及与之匹配右括号之间的 模式所匹配到的字符
  示例:
    \(string1+\(string2\)\)
   \1 :string1\+\(string2\)

   \2 :string2
  后向引用:引用前面的分组括号中的模式所匹配字符,而非 模式本身
  或者:\|
   示例:a\|b: a或b  C\|cat: C或cat  \(C\|c\)at:Cat或cat

十、 扩展正则表达式

 1、扩展正则表达式的元字符

  1.字符匹配:

    . 任意单个字符
   [] 指定范围的字符
   [^] 不在指定范围的字符

  2.次数匹配

    *:匹配前面字符任意次
   ?: 0或1次 +:1次或多次
   {m}:匹配m次
   {m,n}:至少m,至多n次

  3.位置锚定

   ^ :行首
   $ :行尾
   \<,\b:词首
   \>, \b :语尾

  4.分组

   ()
   后向引用:\1,\2,……

  5.或

   a|b: a 或 b
   C|cat: C 或cat
   (C|c )at:Cat 或cat

十一、 VIM编辑器

  Vi:Visual Interface,文本编辑器
  文本:ASCII, Unicode
  文本编辑种类:
  行编辑器: sed
  全屏编辑器:nano, vi
;   vim - Vi Improved
  其他编辑器
   gedit 一个简单的图形编辑器
   gvim 一个Vim编辑器的图形版本

 1、 vim 选项 文件路径

  +#: 打开文件后,让光标处于第#行的行首,
  +默认行尾
  +/PATTERN:打开文件后,直接让光标处于第一个被 PATTERN匹配到的行的行首
  –b file 二进制方式打开文件
  –d file1 file2… 比较多个文件
  -m file 只读打开文件

 2、 ex file或vim -e file 直接进入ex模式

  使用vim打开一个文件时,如果文件存在,文件被打开并显示内容
  如果文件不存在,当编辑后第一次存盘时创建它

 3、 vim的模式

  有三种主要模式

  1. 命令模式:默认模式,移动光标,剪切/粘贴文本

   插入模式:修改编辑文本
   命令行模式:保存退出

  2. 模式转换

   插入模式 --------> 命令模式
        ESC
   命令模式 --------> 扩展命令模式
        :
   扩展命令模式 --------> 命令模式
        ESC,enter

  3. 命令模式(default):移动光标,复制,剪切,粘贴,删除、撤销,重做,搜索,进入其他模式

   移动光标:
    h向左移动一个字符
    l向右移动一个字符
    j向下移动一个字符
    k向上移动一个字符 配合#h,#l,#j,#k可一次性移动#个字符
    w跳到下一个单词的词首
    b跳到上一个单词的词首
    H跳到当前页首
    M跳到当前页中
    L跳到当前页尾
    gg跳到整个文件的首行
    G跳到整个文件的末行
    ^移到非空格开头的行首
    $移到行尾
    #G跳到指定行,或退出模式下:#
    Ctrl+f: 向文件尾部翻一屏
    Ctrl+b: 向文件首部翻一屏
    Ctrl+d: 向文件尾部翻半屏
    Ctrl+u:向文件首部翻半屏
     r替换一个字符
   d剪切
     dd剪切当前行
    #dd剪切#行
    dw剪切光标后一个单词
    db 剪切光标前一个单词
    de 剪切当前光标处一个字符
    d^从光标所在处剪切到行首
    d$或D从光标所在处剪切到行尾
   y复制
    yy或Y复制当前行
    #yy复制#行
    yw复制一个单词
    y^从光标所在处复制到行首
    y$从光标所在处复制到行尾
     ye复制光标处一个字符
    yw复制光标后一个单词
    yb复制光标处前一个单词
   p粘贴
    小写p当前行向下粘贴或光标所在处向后粘贴
    大写P当前行向上粘贴或光标所在处向前粘贴
    小写p:缓冲区存的如果为整行,则粘贴当前光标所在行的下 方;否则,则粘贴至当前光标所在处的后面
    大写P:缓冲区存的如果为整行,则粘贴当前光标所在行的上 方;否则,则粘贴至当前光标所在处的前面
   x删除
     x: 删除光标处的字符
    #x: 删除光标处起始的#个字符
    xp: 交换光标所在处的字符及其后面字符的位置
    ~:转换大小写
    J:删除当前行后的换行符
   替换
    r: 替换光标所在处的字符
    R:切换成REPLACE模式
    撤销
     u撤销最近的更改
    #u撤销之前多次更改
    U 撤消光标落在这行后所有此行的更改
   重做
    按Ctrl - r重做最后的“撤消”更改
    . 重复前一个操作
    n.重复前一个操作n次
    退出
     ZZ: 保存退出
    ZQ:不保存退出
   改变命令(c,change)
    c: 修改后进入插入模式
    命令模式---> 插入模式
     c$ :从光标处删除到行尾
    c^ :从光标处删除至行首
    c0 :等同于c^
    cb :从光标处删除到单词首
    ce :从光标处删除到单词尾
    cw :删除光标处单词
    #cc:删除当前行并输入新内容
    C:等同于c^
   检索
    \ #:在全文中检索出当前光标处的单词并高亮显示

  4. 扩展命令行模式

   :q 退出
   w 保存
   :q! 强制退出,丢弃做出的修改
   :wq 保存退出
   :x 保存退出
   r filename 读取另一个文件的内容并将输出结果写入文件
   w filename 另存为(确认当前用户对该路径中的最后一级目录有wx权限)
   !command 执行命令,将输出结果显示在终端上
   r!command 执行某条命令,在光标所在的当前行向下插入新行并将输出结果输入
   .! command 执行某条命令,替换光标所在的当前行并将输出结果输入
   搜索
    /关键字
     n向下找
     N向上找
    ?关键字
      n向上找
      N向下找
   按ESC或enter进入命令模式

  5.插入模式

  常用于编辑文本内容,按ESC键退出进入命令模式
  从命令模式进入插入模式
   i: insert, 在光标所在处输入
   I:在当前光标所在行的行首输入
   a: append, 在光标所在处后面输入
   A:在当前光标所在行的行尾输入
   o: 在当前光标所在行的下方打开一个新行
   O:在当前光标所在行的上方打开一个新行