1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。

    ①通过who或者w命令,可以查询当前登入至系统的用户信息。

    ②cut命令通过指定特定字符来分割行信息,如空格符, -d" " ,-f 显示分割后指定的段。

    ③sort用来对结果排序,-u排序后去重

[allen@localhost ~]$ who | cut -d" " -f1 | sort -u
allen
root


2、取出当前系统上被用户当作其默认shell的最多的那个shell。

 ①uniq -c用来显示重复行的次数

    ②sort -n对结果按数值大小进行排序。

    ③tail -n 1 获取最后的1行

[allen@localhost ~]$ cat /etc/passwd | cut -d: -f7 | sort | uniq -c | sort -n | tail -n 1 | tr -s " " | cut -d' ' -f3
/sbin/nologin


3、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存/tmp/maxusers.txt文件中。

    sort命令 

        选项:    -t DELIMITER 字段分隔符

                    -k # 以指定字段为标准进行排序

                    -n 按数值大小排序

[allen@localhost ~]$ cat /etc/passwd | sort -n -t: -k3 | tail -n 10 | tr "a-z" "A-Z"> /tmp/maxusers.txt


4、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。

    grep命令

        选项:-E 扩展的正则表达式

                  -o 仅显示匹配到的项

                  --color=auto 对匹配到的项着色显示

        扩展正则表达式元字符

            字符匹配:

                .:      匹配任意单个字符

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

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

            字数匹配:

                *:      匹配前面字符任意次

                ?:      0次或1次

                +:     1次或多次

                {m}:   匹配m次

                {m,n}:至少m次,至多那次

            锚定符:

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

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

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

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

            分组:

                ():将一个字符或多个字符捆绑在一起,当做一个整体进行处理

            或者:

                |:

[root@localhost ~]# ifconfig | grep "addr:" | cut -d: -f2 | cut -d' ' -f1
172.16.130.37
127.0.0.1


[root@localhost ~]#ifconfig | grep -E -o --color=auto "(\<([0-9]|[1-9][0-9]|[1][0-9][0-9]|2[0-4][0-9]|25[0-5]])\>\.){3}\<([0-9]|[1-9][0-9]|[1][0-9][0-9]|2[0-4][0-9]|25[0-4])\>"
172.16.130.37
127.0.0.1


5、显示/var目录下一级子目录或文件的总个数。

[root@localhost ~]# ls /var | wc -l
21


6、取出/etc/group文件中第三个字段数值最小的10个组的名字。

[root@localhost ~]# cat /etc/group | sort -t: -k3 -n | cut -d: -f1 | head -n 10 
root
bin
daemon
sys
adm
tty
disk
lp
mem
kmem


7、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。

[root@localhost ~]# cat /etc/fstab /etc/issue > /tmp/etc.test


8、请总结描述用户和组管理类命令的使用方法并完成以下练习:

    用户管理类命令:

        用户创建:useradd

            useradd [options] LOGIN

            -u UID:[UID MIN,UID MAX],定义在/etc/login.def中

            -g GID:指明用户所属基本组,可为组名,也可以是GID

            -c "COMMENT":用户的注释信息

            -d /PATH/TO/HOME_DIR:以指定的路径为家目录

            -s SHELL:指明用户的默认shell程序,可用列表在/etc/shells文件中;

            -G GROUP1 [,GROUP2,...[,GROUPN]]:为用户指明附加组,组必须事先存在

            -r:创建系统用户

    用户属性修改:usermod

        usermod [OPTION] login

            -u UID:新UID

            -g GID:

            -G GROUP1 [,GROUP2,...[,GROUPN]]:

            -s SHELL:

            -c "COMMENT":

            -d HOME:

            -l login_name:

            -L:lock指定用户

            -U:unlock指定用户

            -e YYYY-MM-DD:指明用户账号过期日期

            -f INACTIVE:设定非活动期限   

    给用户添加密码:passwd

        passwd [OPTIONS] UserName:修改指定用户的密码

        passwd:修改自己的密码

            -l:锁定指定的用户

            -u:解锁指定用户

            -n mindays:指定最短使用期限

            -x maxdays:指定最大使用期限

            -w warndays:提前多少天开始警告

            -i inactivedays:非活动期限

            --stdin:从标准输入接收用户密码

    删除用户:userdel

        userdel [OPTION]... login

            -r:删除用户家目录   

    查看用户相关的ID信息:id

        id [OPTION]... [USER]

            -u:UID

            -g:GID

            -G:Groups

            -n:Name


    组管理类命令:

        组创建:groupadd

        groupadd [OPTION]... group_name

            -g GID:指明GID号;

            -r:创建系统组

    组属性修改:groupmod

        groupmod [OPTION]... group

            -n group_name:新名字

            -g GID:新的GID   

    组删除:groupdel

        groupdel GROUP

    组密码:gpassed

        gpasswd [OPTION] GROUP

            -a user:将user添加至指定组中;

            -d user:删除用户user的以当前组为组名的附加组

            -A user1,user2,...:设置有管理权限的用户列表

        newgrp命令:临时切换基本组


示例一、创建组distro,其GID为2016

[root@localhost ~]# groupadd -g 2016 distro


示例二、创建用户mandriva, 其ID号为1005;基本组为distro;

[root@localhost ~]# useradd  -u 1005 -g 2016 mandriva


示例三、创建用户mageia,其ID号为1100,家目录为/home/linux;

[root@localhost ~]# useradd -u 1100 -d /home/linux mageia


示例四、给用户mageia添加密码,密码为mageedu;

[root@localhost ~]# echo "mageedu" | passwd --stdin mageia
Changing password for user mageia.
passwd: all authentication tokens updated successfully.


示例五、删除mandriva,但保留其家目录;

[root@localhost ~]# userdel mandriva


示例六、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;

[root@localhost ~]# groupadd peguin
[root@localhost ~]# useradd -u 2002 -g 2016 -G peguin slackware


示例七、修改slackware的默认shell为/bin/tcsh;

[root@localhost ~]# usermod -s /bin/tcsh slackware


示例八、为用户slackware新增附加组admins;

[root@localhost ~]# groupadd admins
[root@localhost ~]# usermod -a -G admins slackware


示例九、为slackware添加密码,且要求密码最短使用期限为3天,最长为180天,警告为3天;

[root@localhost ~]# echo "mageedu" | passwd -n 3 -x 180 -w 3 --stdin slackware
Adjusting aging data for user slackware.
passwd: Success


示例十、添加用户openstack,其ID号为3003, 基本组为clouds,附加组为peguin和nova;

[root@localhost ~]# groupadd clouds
[root@localhost ~]# groupadd nova
[root@localhost ~]# useradd -u 3003 -g clouds -G peguin,nova openstack


示例十一、添加系统用户mysql,要求其shell为/sbin/nologin;

[root@localhost ~]# useradd -r -s /sbin/nologin mysql


示例十二、使用echo命令,非交互式为openstack添加密码。

[root@localhost ~]# echo "openstack" | passwd --stdin openstack


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

        修改文件权限:usermod

        chomod [OPTION]... OCTAL-MODE FILE...

            -R:递归修改权限

[root@localhost tuser1]# cp -r /etc/skel /home/tuser1
[root@localhost home]# chmod -R 700 tuser1


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

[root@localhost tuser1]# cat /proc/meminfo | grep ^[Ss]
[root@localhost tuser1]# cat /proc/meminfo | grep -i ^s


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

[root@localhost tuser1]#grep -E -v "(:/sbin/nologin)[[:space:]]*" | cut -d: -f1 /etc/passwd
root
sync
shutdown
halt
news
user1
allen
mageia
slackware
openstack


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

[root@localhost tuser1]#grep -E "(:/bin/bash)[[:punct:]]*" /etc/passwd  | cut -d: -f1
root
user1
allen
mageia
openstack


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

[root@localhost tuser1]#grep -E --color=auto "\<[0-9]{1,2}\>" /etc/passwd


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

[root@localhost tuser1]# grep -E "^#[[:space:]]+[^[:space:]]+" /etc/rc.d/rc.sysinit /etc/rc.d/rc.sysinit
# /etc/rc.d/rc.sysinit - run once at boot time
# Taken in part from Miquel van Smoorenburg's bcheckrc.
# Check SELinux status
# Because of a chicken/egg problem, init_crypto must be run twice.  /var may be
# encrypted but /var/lib/random-seed is needed to initialize swap
....


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

[root@localhost tuser1]# netstat -tan | grep -E "LISTEN[[:space:]]*$"
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:111                 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:733                 0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN


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

[root@localhost ~]#  grep -E "^([[: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
[root@localhost ~]#