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

cp -a /etc/skel /home/tuser1 && chmod -R go-rwx /home/tuser1

cp [OPTION]... SOURCE... DIRECTORY
#-a 此参数的效果和同时指定"-dpR"参数相同,
#-d 若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
#-p  保留源文件或目录的属性
#-R  保留递归复制目录及其子目录内的所有内容

chmod [OPTION]... MODE[,MODE]... FILE...
#-R  可递归遍历子目录,把修改应到目录下所有文件和子目录
#go-rwx  g(组)o(其他)-(删除权限)r(读)w(写)x(执行)

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

[root@localhost ~]# vim /etc/group        
...
mageia:x:1100:
peguin:x:2017:slackware,openstack
admins:x:2018:slackware
nova:x:2019:openstack
clouds:x:2020:
hadoop:x:2021:

#编辑/etc/group,在末行添加组hadoop
#hadoop        组名
#x             用户组加密后的口令字段
#2021          组标识号

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

[root@localhost ~]# vim /etc/passwd        
...
mageia:x:1100:1100::/home/linux:/bin/bash
slackware:x:2002:2016::/home/slackware:/bin/tcsh
openstack:x:3003:2020::/home/openstack:/bin/bash
hadoop:x:2021:2021::/home/hadoop:/bin/bash

#编辑/etc/passwd,在末行添加hadoop用户
#hadoop         用户名
#x              密码(已经加密)      
#2021           UID用户标识
#2021           GID组标识
#/home/hadoop   家目录
#/bin/bash      登录Shell

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

cp -a /etc/skel /home/hadoop && chmod go-rwx /home/hadoop

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

chown -R hadoop:hadoop /home/hadoop/

#chown [选项]... [所有者][:[组]] 文件...
#-R --recursive     可递归遍历子目录,把修改应到目录下所有文件和子目录
#hadoop:hadoop    指定所有者和所有组都为hadoop

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

  • [root@localhost ~]# grep ^[sS] /proc/meminfo 
    SwapCached:            0 kB
    SwapTotal:       4064252 kB
    SwapFree:        4064252 kB
    Shmem:              8684 kB
    Slab:              69320 kB
    SReclaimable:      42636 kB
    SUnreclaim:        26684 kB
    
    grep [OPTIONS] PATTERN [FILE...]
    #^    ^ 表示打头的字符要匹配紧跟^后面的规则
    #[]   [ ]中的内容是可选字符集
  • [root@localhost ~]# grep -i '^s' /proc/meminfo 
    SwapCached:            0 kB
    SwapTotal:       4064252 kB
    SwapFree:        4064252 kB
    Shmem:              8684 kB
    Slab:              69296 kB
    SReclaimable:      42660 kB
    SUnreclaim:        26636 kB
    
    grep [OPTIONS] PATTERN [FILE...]
    #^        ^ 表示打头的字符要匹配紧跟^后面的规则
    #-i     忽略大小

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

[root@localhost ~]# grep -v '/sbin/nologin$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mageia:x:1100:1100::/home/linux:/bin/bash
slackware:x:2002:2016::/home/slackware:/bin/tcsh
openstack:x:3003:2020::/home/openstack:/bin/bash
hadoop:x:2021:2021::/home/hadoop:/bin/bash

#grep -v    查找不包含匹配项的行,不以/sbin/nologin结尾的行就是非/sbin/nologin的用户

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

[root@localhost ~]# grep '/bin/bash$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
mageia:x:1100:1100::/home/linux:/bin/bash
openstack:x:3003:2020::/home/openstack:/bin/bash
hadoop:x:2021:2021::/home/hadoop:/bin/bash

#匹配以/bin/bash结尾的行即为/bin/bash的用户

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

[root@localhost ~]# grep -o '\<[0-9]\{1,2\}\>' /etc/passwd
0
0
1
1
2
2
3
4
4
7
5
0
6
0
7
0
8
12
11
0
12
14
50
99
99
81
81
59
59
89
89
74
74
38
38

#\<[0-9]\{1,2\}\>    \{1,2\}表示之前的数字字符出现次数为1-2次,并加上\<\>进行单词锚定

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

grep '^[[:space:]]\+' /boot/grub/grub.conf

#^[[:space:]]    表示以空白字符开头   
#\+         表示前一个字符重复一次或更多次,并加上转义字符\

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

grep '^[[:space:]]\+[^[:space:]]\+' /etc/rc.d/rc.sysinit

#^[[:space:]]\+    匹配至少一个空白字符
#[^[:space:]]\+    匹配至少一个非空白字符

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

[root@localhost ~]# netstat -tan | grep '\<LISTEN\>[[:space:]]*$'
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN                     LISTEN

#\<LISTEN\>    锚定单词LISTEN
#[[:space:]]*$    匹配出现任意次空白符并结尾

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

[root@localhost ~]# useradd bash
[root@localhost ~]# useradd testbash
[root@localhost ~]# useradd basher
[root@localhost ~]# useradd -s /sbin/nologin nologin
[root@localhost ~]# grep '\(^\<[[:alnum:]]\+\>\).*\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:3004:3004::/home/bash:/bin/bash
nologin:x:3007:3007::/home/nologin:/sbin/nologin

#^\<[[:alnum:]]\+\>\    匹配至少出现一次的字母或数字加上^\<\>进行行首的单词锚定,用来匹配用户名
#\<[[:alnum:]]\+\>    匹配用户名加上,用\(\)括起来将表达式定义为“组”,\1表示引用之前定义的组,跟上$作为行尾锚定