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

    答:本题思路:先用who命令列出当前登陆的用户信息,然后使用cut命令对字段进行分割,选出我们需要的字段,然后使用sort命令对结果进行排序,最后使用uniq命令来去重达到我们需要的效果。

[root@localhost ~]# who | cut -d' ' -f1 | sort | uniq
root

2、取出最后登录到当前系统的用户的相关信息。

    答:id `who | tail -1 | cut -d" " -f1`

[root@localhost ~]# id `who | tail -1 | cut -d" " -f1`
uid=3005(openstack) gid=3005(openstack) groups=3005(openstack)

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

    答:解题思路:先使用cat命令查看passwd文件,然后以:号为分割符使用cut命令取出第七个字段也就是表示shell的那个字段,然后使用sort对其进行排序,避免统一shell分散至各处导致后面去重统计不准确,然后再使用uniq -c去重,并对重复次数进行记录,在使用sort -n对第一列以数值方式排序,最后一个就是使用最多的shell,使用tail -1取出,然后使用cut命令去掉前面不需要的数值,就是我们需要的结果了。

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

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

    答:本题先读取/etc/passwd文件,然后用sort命令以:分割对第三个字段以数值进行排序,使用tail命令取出后十行,然后使用tr命令将小写转换为大写重定向输出至/tmp/maxuers.txt中。

[root@localhost ~]# cat /etc/passwd | sort -t':' -k3 -n | tail -10 | tr "a-z" "A-Z" >/tmp/maxusers.txt
[root@localhost ~]# cat /tmp/maxusers.txt
SSHD:X:74:74:PRIVILEGE-SEPARATED SSH:/VAR/EMPTY/SSHD:/SBIN/NOLOGIN
DBUS:X:81:81:SYSTEM MESSAGE BUS:/:/SBIN/NOLOGIN
POSTFIX:X:89:89::/VAR/SPOOL/POSTFIX:/SBIN/NOLOGIN
NOBODY:X:99:99:NOBODY:/:/SBIN/NOLOGIN
AVAHI-AUTOIPD:X:170:170:AVAHI IPV4LL STACK:/VAR/LIB/AVAHI-AUTOIPD:/SBIN/NOLOGIN
ABRT:X:173:173::/ETC/ABRT:/SBIN/NOLOGIN
POLKITD:X:997:995:USER FOR POLKITD:/:/SBIN/NOLOGIN
SYSTEMD-NETWORK:X:998:996:SYSTEMD NETWORK MANAGEMENT:/:/SBIN/NOLOGIN
SYSTEMD-BUS-PROXY:X:999:997:SYSTEMD BUS PROXY:/:/SBIN/NOLOGIN
USER1:X:1000:1000::/HOME/USER1:/BIN/BASH

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

  答:通过观察发现ifconfig命令下IP地址所在行以inet开头,所有用grep命令取出相关行数,这些行都是由多个空格分隔,用tr -s命令将多个空格改成一个空格,便于后面使用cut命令对行进行分割,经过多次分割,最后剩下IPV4地址和本地还回地址,考虑到实际有可能有多个地址,因此使用grep -v 显示除还回地址之外的所有ip。

[root@localhost ~]# ifconfig | grep '\<inet\>' | tr -s ' ' | cut -d' ' -f 3 | cut -d':' -f2 |grep -v "\<127\>"
192.168.199.147
[root@localhost ~]#

6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。

    答:先使用ls命令列出所有*.conf结尾的文件,使用tr命令转换为大写输出重定向至指定位置。

[root@localhost etc]# ls -a /etc/*.conf | tr 'a-z' 'A-Z' >/tmp/etc.conf

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

    答:使用ls -l命令列出所有的文件或目录,由于每行第一个标识符表示不同的文件,因此可以使用grep删选出形同类型的文件,然后使用wc统计行数就是目录或者文件的个数了。

        统计目录个数:

[root@localhost ~]# ls -l /var | grep "^d" | wc -l
18

        统计文件个数:

[root@localhost ~]# ls -l /var | grep "^-" | wc -l
1

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

    答:取出/etc/group下所有行,使用sort以第三个字段按数值大小进行排序,然后使用head取出前10个,使用cut命令取出我们需要的名字

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


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

    答使用cat命令打开多个文件,然后使用追加重定向至/tmp/etc.test中,测试结果如下图:

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

#
# /etc/fstab
# Created by anaconda on Mon Aug  1 07:29:14 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=4c7002fa-bdd3-4f1e-8d15-8d73756bcdab /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
CentOS release 6.8 (Final)
Kernel \r on an \m


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

    答:用户管理类命令:

        useradd:添加用户

            使用格式1:useradd [OPTION] USERNAME

            常用选项:-u UID-->指明用户的UID

                              -g GID-->指明用户的基本组ID

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

                              -d /PATH/TO/SOMEWHERE-->以指定的路径为用户的家目录,指定的家目录最                                                                                                            好事先不存在,如果存在则需手动到/etc/skel下                                                                                                              复制用户的环境。

                              -s SHELL-->指定用户的默认SHELL,可用列表在/etc/shells文件中。

                              -G GROUP1[,GROUP2,GROUP3...]-->为用户指明附加组,可多个,以逗号分隔。

                              -r -->创建系统用户

            使用格式2:useradd -D

            常用选项:-s SHELL-->修改默认SHELL,关于useradd的默认值存放在/etc/default/useradd                                                     文件中,可以直接修改文件内容来达到修改默认值得目的。

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

            使用格式:id [OPTION] ..USER

            常用选项:-u -->查看指定用户的UID

                              -g -->查看指定用户的基本组ID

                              -G-->查看指定用户所在附加组ID

                              -n-->显示用户

        su:切换用户或以其他身份执行命令

            使用格式:su [OPTION] [-] [USER [ARGS..]]

                              su Username-->非登录式切换,不会读取目标用户的配置文件

                              su - Username-->登录式切换,会读取目标用户的配置文件,完全切换

                              su [-] Username -c "COMMAND"-->换个身份执行命令,命令执行完成自动还

                                                                                                          原为原来的身份

              常用选项:-l -->su -l Username相当于su - Username

        usermod:用户属性修改

            使用格式:usermod [OPTION] USERNAME

            常用选项:-u UID -->修改用户的UID

                              -g GID -->修改用户的基本组ID

                              -G GROUP1[,GROUP2,GROUP3...]-->修改用户的附加组ID,新附加组,原来的附                                                  加组将会被覆盖;若保留原有,则要同时使                                                      用-a选项,表示append.   

                              -s SHELL -->新的默认shell

                              -c "COMMENT"-->新的注释信息

                              -d HOME -->新的家目录,原家目录中的文件不会同时移动至新的家目录,若                                                           要移 动,则同时使用-m选项

                              -L-->锁定用户

                              -U-->解锁用户

                              -e YYYY-MM-DD-->指明用户帐户过期日期

                              -f INACTIVE-->设定非活动期限

        passwd:给用户添加密码

                使用格式:passwd [OPTION] Username-->修改指定用户的密码,仅root有权限

                                  passwd-->修改自己的密码,所有用户均有权限

                常用选项:-l -->锁定用户

                                  -u-->解锁用户

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

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

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

                                  -i inactivedays-->非活动期限

                                  --stdin-->从标准输入接受用户密码

                                        echo "PASSWORD" | passwd  --stdin USERNAME

        userdel:删除用户

                使用格式:userdel [OPTION] ...USERNAME

                常用选项:-r-->默认不删除用户的家目录,加此选项则删除

        组管理类命令:    

        groupadd:添加组

                使用格式: groupadd [OPTION] ...GROUP_NAME

                 常用选项:-g GID-->指明GID号

                                   -r -->创建系统组  centos61-499,centos71-999

        groupmod:修改组

                使用格式:groupmod [OPTION] ...GROUP_NAME

                常用选项:-n NEW_GROUP-->新的组名

                                  -g GID-->新的GID

        groupdel:删除组

                使用格式:groupdel GROUP_NAME

        gpasswd:组密码

                使用格式:gpasswd [OPTION] ...GROU_NAME

                常用选项:-a user :将user添加至指定组中

                  -d user:三层用户user的以当前组为组名的附加组

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

                  newgrp:临时切换用户的基本组;如果用户本不属于此组,则需要组密码;

  (1)、创建组distro,其GID为2016;

    答:groupadd -g 2016 distro

[root@localhost ~]# groupadd -g 2016 distro
[root@localhost ~]# cat /etc/group | tail -1
distro:x:2016:

  (2)、创建用户mandriva, 其ID号为1005;基本组为distro;

    答:useradd -u 1005 -g distro mandriva

[root@localhost ~]# useradd -u 1005 -g distro mandriva
[root@localhost ~]# id mandriva
uid=1005(mandriva) gid=2016(distro) groups=2016(distro)
[root@localhost ~]#

  (3)、创建用户mageia,其ID号为1100,家目录为/home/linux;

    答:useradd -u 1100 -d /home/linux mageia

[root@localhost ~]# useradd -u1100 -d /home/linux mageia
mandriva:x:1005:2016::/home/mandriva:/bin/bash
mageia:x:1100:1100::/home/linux:/bin/bash

(4)、给用户mageia添加密码,密码为mageedu;

    答:echo "mageedu" | passwd --stdin mageia。

[root@localhost ~]# echo "mageedu" | passwd --stdin mageia
Changing password for user mageia.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# cat /etc/shadow | tail -5
oprofile:!!:17013::::::
tcpdump:!!:17013::::::
gentoo:!!:17031:0:99999:7:::
mageia:$6$lXgx.iDE$cCVP3OUKxaDin89Iq7Q3hryTMcsvrLlAS2NF21QvgTiNATXTSfEt128g7nw1bbYOIRRnVL4zVMnFe5Vnblpmh0:17031
:0:99999:7:::

  (5)、删除mandriva,但保留其家目录;

    答:userdel mandriva  userdel默认不删除用户的家目录

[root@localhost ~]# userdel mandriva
[root@localhost ~]# ls /home
gentoo  linux  mandriva  #此处Linux目录仍存在
[root@localhost ~]#

  (6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;

    答:groupadd pegui ; useradd -u 2002 -g distro -G peguin

[root@localhost ~]# groupadd peguin;useradd -u 2002 -g distro -G peguin slackware
[root@localhost ~]# cat /etc/passwd | tail -1
slackware:x:2002:2016::/home/slackware:/bin/bash
[root@localhost ~]# id slackware
uid=2002(slackware) gid=2016(distro) groups=2016(distro),2601(peguin)

  (7)、修改slackware的默认shell为/bin/tcsh;

    答:usermod -s /bin/tcsh slackware

[root@localhost ~]# usermod -s /bin/tcsh slackware
[root@localhost ~]# cat /etc/passwd | tail -1
slackware:x:2002:2016::/home/slackware:/bin/tcsh

  (8)、为用户slackware新增附加组admins;

    答:groupadd admins;usermod -G -m admins slackware

[root@localhost ~]# groupadd admins&&usermod -a -G admins slackware
[root@localhost ~]# id slackware
uid=2002(slackware) gid=2016(distro) groups=2016(distro),2601(pegui),2602(admins)
[root@localhost ~]#

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

    答:echo "mageedu" | passwd --stdin slackware && passwd -n 3 -x 180 -w 3 slackware

[root@localhost ~]# echo "mageedu" | passwd --stdin slackware && passwd -n 3 -x 180 -w 3 slackware
Changing password for user slackware.
passwd: all authentication tokens updated successfully.
Adjusting aging data for user slackware.
passwd: Success
[root@localhost ~]# cat /etc/shadow | tail -1
slackware:$6$kZJ/T3m/$U7TcYOizld8GXY3ckBqk/nq5NZL97DW0apIinJNyNEmqMtWR7nTnpDjM6sYV.ssPJ8rKN8Uwj3nSB26j2LgM/.:17
031:3:180:3:::

  (10)、添加用户openstack,其ID号为3003, 基本组为clouds,附加组为peguin和nova;

    答:groupadd clouds ;groupadd peguin ;groupadd nova ;useradd -u 3003 -g                 clouds -G peguin,nova openstack

[root@localhost ~]# groupadd clouds;groupadd peguin;groupadd nova;useradd -u 3003 -g clouds -G peguin,nova open
stack
[root@localhost ~]# id openstack
uid=3003(openstack) gid=2603(clouds) groups=2603(clouds),2604(peguin),2605(nova)

  (11)、添加系统用户mysql,要求其shell为/sbin/nologin;

    答:useradd -r  -s /sbin/nologin mysql

[root@localhost ~]# useradd -r -s /sbin/nologin mysql
[root@localhost ~]# cat /etc/passwd | tail -1
mysql:x:498:498::/home/mysql:/sbin/nologin

  (12)、使用echo命令,非交互式为openstack添加密码。

    答:echo "mageedu" | passwd --stdin opentack

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