Linux学习之grep篇

一、接上篇用户及权限管理

Command:chmod / chown / chgrp / umask

1、chmod(修改文件权限)

SYNOPSIS
       chmod [OPTION]... MODE[,MODE]... FILE...
       chmod [OPTION]... OCTAL-MODE FILE...
       chmod [OPTION]... --reference=RFILE FILE...

 分为三类:

u:owner(属主)

g:group(属组)

o:other(其他)

a:all

三种用法:

a、=mode 使用等号赋值,这样会将以前的属性给消除掉。如果一个文件test的权限是-rwxr-xr--,使用chmod u=rw test后,会使test的权限变成-rw-r-xr-x;

注意:如果=号后不更任何权限,则该类的权限这位---

      如果更改的是目录的属性在不使用参数的前提下只会更改目录的属性,不会影响目录下的文件属性,如想更改目录以及目录中文件的属性可使用-R(表示递归之意)参数。

b、[+|-]mode

 如chmod u+rw test 则表示给属主赋予读写权限

c、--reference=rfile file(表示按照rfile文件的权限给file相同的权限)

如:chmod --reference=test1 test

wKiom1XnFlbQYsaCAALtvmbqOgw990.jpg

2、chown(修改文件属主)

SYNOPSIS
       chown [OPTION]... [OWNER][:[GROUP]] FILE...
       chown [OPTION]... --reference=RFILE FILE...

两种修改方法

a、chown owner:group file //chown命令后跟属主和属组就可以了

如:chown basher:usera test //将test文件的属主改为basher,属组改为usera

注意:如果只想更该属组只需在chown后跟:group属性就好。

如:chown :Oracle test1


b、chown --reference=rfile file

如:chown --reference=test test1 //将test1的属主和属组设置为test的属主和属组


注意如果想修改目录以及目录里文件的属主、属组依然是chown后跟-R参数

wKiom1XnGWGAIoxnAAJwnRTDudI315.jpg

3、chgrp(修改文件的属组)

SYNOPSIS
       chgrp [OPTION]... GROUP FILE...
       chgrp [OPTION]... --reference=RFILE FILE...

使用方法跟上面两种一样,这里就不一一展示了。


4、umask(遮罩码)//通过设置遮罩码可以修改生成文件和目录的权限

超级用户的umask=0022

普通用户的umask=0002

目录的权限=777-umask

文件的权限=666-umask

注意:如果有一类用户的权限减得的结果中o位有执行权限,则此时系统会自动让其权限为加1:

      通过umask vlaue设定的umask值只对当前的shell进程有效。如果想起永久的生效应该修改/etc/bashrc文件里面的umask值。

例:将超级用户的umask设置为0023 后使用超级用户创建目录和文件的默认权限

wKioL1XnH-CwOlTZAAOSnL6zfGU319.jpg

二、grep以及正则表达式

1、grep:Global search REgular expression and Print out the line.//全局搜索(匹配正则表达式的)并打印

作用:文本搜索工具,根据用户指定的“模式(pattern//此处可以是正则表达式)”逐行去搜索目标文本,并打印匹配到的行;

模式:是由正则表达式的元字符以及文本字符所编写的过滤条件;

元字符:不表示其字面的意思,而是用于表示通配或控制功能;


正则表达式分为两类:

基本正则表达式:BRE

扩展正则表达式:ERE


2、grep使用方法以及参数

SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

选项[OPTIONS]:

 --color=auto:对匹配到的文字做高亮显示;

 -v:显示模式没有匹配到的行;

 -o:只显示模式匹配到的行;

 -i:表示忽略大小写;

 -q:静默模式,匹配但是不显示结果

 -E:使用扩展的正则表达式;

例:

wKiom1XnI4KBk5aIAAG8rcACMTw559.jpg


3、正则表达式

a、基本正则表达式的元字符:

 a)、字符匹配:

  .:点号表示匹配任意单个字符;

  []:匹配指定范围内的任意单个字符;

  [^]:匹配指定范围外的任意单个字符;

  [:alnum:]:匹配所的字母和数字;

  [:space:]:匹配空格;

  [:alpha:]:匹配字母;

  [:cntrl:]:匹配键盘上的控制键;

  [:digit:]:匹配数字;

  [:lower:]:匹配小写字母;

  [:upper:]:匹配大写字母;

  [:xdigit:]:匹配16进制数字;

例:wKioL1XnLEeyY_YIAAOur5OjIGk360.jpg


 b)、次数匹配:

  *:任意次;

  \?:0或1次;

  \+:1次以上;

  \{m\}:精确m次;

  \{m,n\}:至少m次,最多n次;其有两种特殊的用法;

    \{0,n\}:最多n次;

    \{m,\}:至少m次;

   .*:匹配任意长度的任意字符;

例:wKioL1XnLuzjd4kkAAK4YI56cvs137.jpg

 

 c)、位置锚定:

   ^:行首锚定,用于模式的最左侧;

   $:行尾锚定,用于模式的最右侧;

   \<,\b:词首锚定,用于表示单词的模式的左侧;

   \>,\b:词尾锚定,用于表示单词的模式的右侧;

   ^$:匹配空白行;

例:wKiom1XnLbvi5L16AAJMUqrXDys157.jpg


 d)、分组:\(\)

    分组的小括号中的模式匹配到的内容,会在执行过程中被正则表达式引擎记录下来,并保存在内置的变量中,这些变量分别是\1,\2,...

   \1:从左侧起,第一对小括号中间的模式匹配到内容;

    以后以此类推;

   后向引用:使用变量引用前面的分组括号中模式匹配到的内容;


例:wKioL1XnMR-g1Rl7AAFpsIkQQ74281.jpg

 3、egrep扩展的正则表达式:

grep家庭有三个命令:

 grep:基本正则表达式

   -E: 扩展正则表达式

   -F:不支持正则表达式

    egrep:扩展正则表达式

    fgrep:不支持正则表达式


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

    a)、字符匹配:

     .:点号表示匹配任意单个字符;

     []:匹配指定范围内的任意单个字符;

     [^]:匹配指定范围外的任意单个字符;

    b)、次数匹配:

     *:任意次;

     ?:0或1次;

     +:1次以上;

     {m}:精确m次;

     {m,n}:至少m次,最多n次;其有两种特殊的用法;

     {0,n}:最多n次;

     {m,}:至少m次;

      .*:匹配任意长度的任意字符;

    c)、位置锚定:

     ^:行首锚定,用于模式的最左侧;

     $:行尾锚定,用于模式的最右侧;

     \<,\b:词首锚定,用于表示单词的模式的左侧;

     \>,\b:词尾锚定,用于表示单词的模式的右侧;

     ^$:匹配空白行;

    d)、分组:\(\)

     分组的小括号中的模式匹配到的内容,会在执行过程中被正则表达式引擎记录下来,并保存在内置的变量中,这些变量分别是\1,\2,...

    \1:从左侧起,第一对小括号中间的模式匹配到内容;

     以后以此类推;

    后向引用:使用变量引用前面的分组括号中模式匹配到的内容;

    e)、或者

a|b 

C|cat: 不表示Cat或cat,而表示C或cat;

要写成(C|c)at


因为egrep的用法跟grep类似,这样就不做掩饰了。


三、作业

1、显示/etc/passwd文件中以bash结尾的行

 grep 'bash$' /etc/passwd

wKioL1XnOXmSMV53AAG3Kt0NZHI474.jpg

2、显示/etc/passwd文件中的两位数或三位数

 egrep --color=auto '([1-9][1-9]|[1-9][1-9][1-9])' /etc/passwd

wKiom1XnN2eB4SnzAAbihPItm10435.jpg


3、显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行

  netstat -tan | grep --color=auto 'LISTEN[[:space:]]\{0,\}$'

  netstat -tan | grep --color=auto 'LISTEN[[:space:]]*$'

wKioL1XnOaGDzey8AAHvHhylvOo007.jpg


4、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行

useradd bash

useradd testbash

useradd -s /sbin/nologin nologin 

egrep '(^\<[[:alnum:]].*\>).*\1$' /etc/passwd

egrep '(^\<[[:alnum]]{0,}\>){0,}1$' /etc/passwd

grep --color=auto '\(^\<[[:alnum:]].*\>\).*\1$' /etc/passwd

wKiom1XnN5OC6z2bAAFTCBS_QOE088.jpg



5、显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)

useradd user1

useradd centos 

egrep '^root|^centos|^user' /etc/passwd | cut -d: -f 1,3,7 


wKioL1XnOceg9SwtAAETfmNB8vY513.jpg


6、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行

egrep '\<[[:alpha:]].*\>.*\(\)' /etc/rc.d/init.d/functions

wKiom1XnN7XT01iYAAJdzlIkxDw466.jpg


7、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名

echo "/etc/rc.d/init.d/functions/" | egrep '[[:alnum:]]+/+$'

echo "/etc/rc.d/init.d/functions" | egrep '.*/'

wKioL1XnOeWRg8PxAADduSP1ld8091.jpg


18、找出ifconfig命令执行结果中1-255之间的数字

ifconfig | egrep -o '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'

wKiom1XnN9CzskWtAAUm3CfCrfU283.jpg


ps:以上总结可能会有不足或者错误的地方,请大家指正。

你可能感兴趣的:(chown,chgrp,grep,元字符,chmod,字符匹配,umask,锚定,次数匹配)