第四周博客作业

用户权限和正则表达式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

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code