第四周博客作业

用户权限和正则表达式grep相关

正则表达式grep相关

grep: Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式的元字符及文本字符所编写出的过滤条件;

正则表达式引擎;

grep  [OPTIONS]  PATTERN  [FILE…]
grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE…]
OPTIONS:
–color=auto:对匹配到的文本着色后高亮显示;
-i:ignorecase,忽略字符的大小写;
-o:仅显示匹配到的字符串本身;
-v, –invert-match:显示不能被模式匹配到的行;
-E:支持使用扩展的正则表达式元字符;
-q, –quiet, –silent:静默模式,即不输出任何信息;
-A #:after, 后#行
-B #:before,前#行
-C #:context,前后各#行

基本正则表达式元字符:

*字符匹配:
. :匹配任意单个字符;
[]:匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符;
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

*匹配次数:
用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;
*:匹配其前面的字符任意次;0,1,多次;
例如:grep “x\+y”
abxy
aby
xxxxxy
yab
.*:匹配任意长度的任意字符
\?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;
\+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次;
\{m\}:匹配其前面的字符m次;
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多n次
\{m,\}:至少m次

*位置锚定:
^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^PATTERN$:用于PATTERN来匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行;

单词:非特殊字符组成的连续字符(字符串)都称为单词;
\< 或 \b:词首锚定,用于单词模式的左侧;
\> 或 \b:词尾锚定,用于单词模式的右侧;
\<PATTERN\>:匹配完整单词;

*分组及引用
\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;
\(xy\)*ab

分组括号中的模式匹配 到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\3

He loves his lover.
He likes his lover.
She likes her liker.
She loves her liker.
~]# grep  “\(l..e\).*\1”  lovers.txt

后向引用:引用前面的分组括号中的模式所匹配到的字符;

扩展的正则表达egrep:

支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E

egrep [OPTIONS] PATTERN [FILE…]
选项:
-i, -o, -v, -q, -A, -B, -C
-G:支持基本正则表达式

扩展正则表达式的元字符:
*字符匹配:
.:任意单个字符
[]:指定范围内的任意单个字符
[^]:指定范围外的任意单个字符
 
*次数匹配:
*:任意次,0,1或多次;
?:0次或1次,其前的字符是可有可无的;
+:其前字符至少1次;
{m}:其前的字符m次;
{m,n}:至少m次,至多n次;
{0,n}
{m,}

*位置锚定
^:行首锚定;
$:行尾锚定;
\<, \b:词首锚定;
\>, \b:词尾锚定;

*分组及引用:
():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;
后向引用:\1, \2, …
或:
a|b:a或者b;
C|cat:C或cat
(c|C)at:cat或Cat

1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。

示例:[root@localhost ~]# cp -r /etc/skel /home/tuser1
            [root@localhost ~]# chmod -R g-rx,o-rx /home/tuser1
            [root@localhost ~]# ll -a /home/tuser1
             总用量 36
             d-wx——. 5 root root 4096 3月 29 20:09 .
             drwxr-xr-x. 8 root root 4096 3月 29 20:06 ..
             -rw——-. 1 root root 18 3月 29 20:06 .bash_logout
              -rw——-. 1 root root 176 3月 29 20:06 .bash_profile
              -rw——-. 1 root root 124 3月 29 20:06 .bashrc
              -rw——-. 1 root root 500 3月 29 20:06 .emacs
            drwx——. 2 root root 4096 3月 29 20:06 .gnome2
            drwx——. 4 root root 4096 3月 29 20:06 .mozilla
            drwx——. 4 root root 4096 3月 29 20:09 skel

解释:chmod命令修改文件权限命令,R为递归修改

2、编辑/etc/group文件,添加组hadoop

示例:[root@localhost tuser1]# vim /etc/group
            [root@localhost tuser1]# tail -1 /etc/group
             hadoop:x:3006

3、手动/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号; 其家目录为/home/hadoop 。

示例:[root@localhost tuser1]# vim /etc/group

             [root@localhost ~]# tail -1 /etc/group
             hadoop:x:3006:3006:/home/hadoop:/bin/bash

4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。

示例:[root@localhost ~]# cp -r /etc/skel /home/hadoop
           [root@localhost ~]# chmod -R g-rx,o-rx /home/hadoop
           [root@localhost ~]# ll -a /home/hadoop
            总用量 32
           drwx——. 4 root 0 4096 3月 29 21:14 .
           drwxr-xr-x. 10 root 0 4096 3月 29 21:14 ..
          -rw——-. 1 root 0 18 3月 29 21:14 .bash_logout
          -rw——-. 1 root 0 176 3月 29 21:14 .bash_profile
          -rw——-. 1 root 0 124 3月 29 21:14 .bashrc
           -rw——-. 1 root 0 500 3月 29 21:14 .emacs
           drwx——. 2 root 0 4096 3月 29 21:14 .gnome2
          drwx——. 4 root 0 4096 3月 29 21:14 .mozilla

5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop

示例:[root@localhost ~]# chown -R hadoop:hadoop /home/hadoop
            [root@localhost ~]# ll -a /home/hadoop
            总用量 32
            drwxr-xr-x. 4 hadoop hadoop 4096 3月 29 22:33 .
            drwxr-xr-x. 3 root root 4096 3月 29 22:33 ..
            -rw-r–r–. 1 hadoop hadoop 18 3月 29 22:33 .bash_logout
            -rw-r–r–. 1 hadoop hadoop 176 3月 29 22:33 .bash_profile
           -rw-r–r–. 1 hadoop hadoop 124 3月 29 22:33 .bashrc
           -rw-r–r–. 1 hadoop hadoop 500 3月 29 22:33 .emacs
           drwxr-xr-x. 2 hadoop hadoop 4096 3月 29 22:33 .gnome2
           drwxr-xr-x. 4 hadoop hadoop 4096 3月 29 22:33 .mozilla

 6、显示/proc/meminfo文件中以大写或小写S开头的行;用三种方式

 

示例1:[root@localhost ~]# grep “^[sS]” /proc/meminfo                 #^:行首匹配
              SwapCached: 0 kB
              SwapTotal: 2031612 kB
              SwapFree: 2031612 kB
              Shmem: 1264 kB
             Slab: 78116 kB
             SReclaimable: 16236 kB
             SUnreclaim: 61880 kB

示例2:[root@localhost ~]# grep -E “^s|S” /proc/meminfo            #-E:使用扩展正则表达式
             SwapCached: 0 kB
            SwapTotal: 2031612 kB
            SwapFree: 2031612 kB
            Shmem: 1264 kB
            Slab: 78132 kB
            SReclaimable: 16236 kB
            SUnreclaim: 61896 kB

示例3:[root@localhost ~]# grep -i “^s” /proc/meminfo              #-i:忽略字符大小写的差别。

            SwapCached: 0 kB
            Swa pTotal: 2031612 kB
            SwapFree: 2031612 kB
            Shmem: 1264 kB
           Slab: 78108 kB
           SReclaimable: 16236 kB
           SUnreclaim: 61872 kB

7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户

示例:[root@localhost ~]# grep -v “/sbin/nologin$” /etc/passwd | cut -d : -f1
            root
            sync
            shutdown
            halt
            hadoop

8、显示/etc/passwd文件中其默认shell为/bin/bash的用户

示例:[root@localhost ~]# grep “/bin/bash$” /etc/passwd | cut -d : -f1
             root
             hadoop

9、找出/etc/passwd文件中的一位数或两位数

示例:[root@localhost ~]# grep -o “\<[0-9]\{1,2\}\>” /etc/passwd | wc -l
           58

解释:-o 只显示匹配字符   [0-9]数字范围    {1,2}匹配前面字符最少1次,最多2次;表示一位或两位字符变化0-9的所有字符。

10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行

示例:[root@localhost ~]# grep “^[[:space:]]\+” /boot/grub/grub.conf

            root (hd0,0)

解释:^行首匹配  [[:space:]]空白字符    \+匹配前面字符一次或多次

11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

示例:[root@localhost ~]# grep “^#[[:space:]]\+[^[:space:]]\+” /etc/rc.d/rc.sysinit | wc -l
            38

解释:^行首匹配以#开头后面跟 [[:space:]]空白字符,\+匹配前面字符一次或多次,[^[:space:]]非空白字符的行

 

12、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;

示例:[root@localhost ~]# netstat -tan |grep “LISTEN[[:space:]]*$”
            tcp 0 0 0.0.0.0:33682 0.0.0.0:* LISTEN
            tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
            tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
            tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
            tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
           tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
           tcp 0 0 :::22 :::* LISTEN  

解释:netstat -tan命令执结果管道,筛选出‘LISTEN’,后或跟[[:space:]]空白字符,$行尾匹配的行。

13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

示例:[root@localhost ~]# grep -E “^([^;]+\>).*\1$” /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bash:x:501:501::/home/bash:/bin/bash
nologin:x:504:504::/home/nologin:/sbin/nologin

解释:^行首匹配,[^;]除;号外的任意单个字符, +:其前字符至少1次,\>词尾锚定的.*任意长度任意字符,\1后向引用  $词尾锚定

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/93718

(0)
任总任总
上一篇 2018-03-29
下一篇 2018-03-29

相关推荐

  • N31第六周作业

    本周(7.23–7.29)第六周 1、简述osi七层模型和TCP/IP五层模型 OSI 七层模型 1、应用层:OSI 参考模型中最靠近用户的一层,为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。 2、表示层:提供各种用于应用层数据的编码和转换功能,确保一个…

    Linux笔记 2018-08-01
  • 磁盘阵列及逻辑卷的创建

    磁盘阵列 软件RAID的实现 mdadm:模式化的工具 命令的语法格式:mdadm[mode] <raiddevice> [options] <component-devices> 支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10 模式: 创建:-C 装配: -A …

    Linux笔记 2018-04-30
  • systemd及awk简介

    systemd及awk简介

    Linux笔记 2018-04-20
  • Linux基础入门

    一、计算机的组成及其功能 计算机由五大基本部件组成(遵从冯诺依曼体系): CPU:运算器、控制器、寄存器(锁存数据)、缓存(缓存数据) 存储器:通常成为内存,RAM 输入设备:下指令,提供数据等 输出设备:输出数据加工的结果 程序:由指令+数据组成 二、Linux的主流发行版及不同发行版之间的联系与区别 不同发行版Linux操作系统都是由Linux内核和GN…

    Linux笔记 2018-07-27
  • 第七周作业

    1、简述linux操作系统启动流程
    2、简述grub启动引导程序配置及命令行接口详解
    3、实现kickstart文件制作与光盘镜像制作

    Linux笔记 2018-06-22
  • 计算机原理与Linux基础

    计算机的组成及功能 1、其实计算机的组织分为内部设备和外部设备, 内部设备:         CPU:运算器、寄存器、缓存         存储器:内存,RAM(Random Access Memory)         控制器:控制器是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。 外部…

    Linux笔记 2018-05-13