用户及用户组管理命令

在了解Linux系统中与用户及用户组相关的配置文件后,实际上我们可以通过修改这些配置文件来建立用户,但一般很少这样做,因为在Linux系统提供了很多命令方便我们建立用户及用户组。

5.2.1 useradd:建立用户

useradd命令用于建立用户,该命令语法如下。

        useradd [-u <UID>] [-g <用户组>] [-G <用户组…>] -[Mm] [-c <说明信息>] [-d <目录>] [-s <Shell>]
    用户名

常用指数:

常用选项:

● 用户名:要建立用户的名称。

● -u UID:UID是一个整数,直接指定用户的UID。在RHEL 5.x中如果不使用该选项时,用户的UID会从500开始,每建立一个用户该用户的UID会增加1。

● -g<用户组>:用户组可以指定为一个已存在用户组的名称或GID,用于指定用户的初始组。在RHEL 5.x中如果不使用该选项时,会建立一个与用户名相同的ID及名称的组作为用户的初始组。

● -G<用户组…>:用户组可以指定为一个或多个已存在用户组的名称或GID,用于指定用户的额外组。如果指定多个额外组时,每个组之前使用“,”分隔。在RHEL 5.x中如果不使用该选项时,是不会给用户指定额外组的。

● -c <说明信息>:指定用户的说明信息,这个就是“/etc/passwd”文件中第5列的说明内容。

● -d<目录>:指定某个目录作为该用户家目录。在RHEL 5.x中如果不使用该选项时,会在“/home”目录中建立一个与用户名相同的目录作为该用户的家目录。

● -s<Shell>:指定用户的登录Shell。在RHEL 5.x中如果不使用该选项时,会为用户指定“/bin/bash”作为登录Shell。

● -M:不建立用户家目录。

● -m:建立用户家目录。在RHEL 5.x中如果不指定“-M”或“-m”时,会根据“/etc/login.defs”文件中“CREATE_HOME”选项决定是否建立用户家目录。

useradd用于建立用户,用户建立完成后还需要通过“passwd”命令指定用户的密码。该命令执行完成后,信息将会保存在“/etc/passwd”文件中。该命令默认只有root用户可以使用。下面看几个useradd命令的例子。

● 建立一个名为“charles”的用户。

        [root@srv ~]# useradd charles

● 建立一个名为“jack”的用户,并指定其用户说明信息为“JackBauer”。

        [root@srv ~]# useradd jack -c JackBauer

● 建立一个名为“nina”的用户,并指定其登录脚本为“/sbin/nologin”(该用户不能登录到系统)。

        [root@srv ~]# useradd nina -s /sbin/nologin

● 建立一个名为“house”的用户,并指定其UID为999。

        [root@srv ~]# useradd house -u 999

● 建立一个名为“olivia”的用户,并指定其初始组为“charles”。

        [root@srv ~]# useradd olivia -g charles

● 建立一个名为“claire”的用户,并指定其家目录为“/home/heroes”。

        [root@srv ~]# useradd claire -d /home/heroes

5.2.2 passwd:更改用户密码

passwd命令用于指定或更改用户密码,该命令语法如下。

        passwd [-luS] [-n <天数>] [-x <天数>] [-w <天数>] [用户名]

常用指数:

常用选项:

● 用户名:指定需要指定或更改密码的用户。

● -l:将指定用户锁定,实际就是在“/etc/shadow”文件中该用户对应行第2列的第一个字符前插入一个“!”。

● -u:将锁定的用户解锁。

● -S:显示指定用户与密码相关的信息。

● -n<天数>:指定密码最短更改时间,实际就是在“/etc/shadow”文件中该用户对应行第4列的内容。

● -x<天数>:指定密码最长使用时间,实际就是在“/etc/shadow”文件中该用户对应行第5列的内容。

● -w<天数>:指定密码更改警告时间,实际就是在“/etc/shadow”文件中该用户对应行第6列的内容。

passwd命令可以让用户更改自己的密码,所有用户必须在指定密码后才有可能登录到系统。root用户可以通过该命令管理其他用户的密码。在使用passwd命令时如果不指定用户则是修改当前用户的密码,实际上也只有root用户可以在该命令中指定用户名。下面看几个passwd命令的例子。

● 更改用户“charles”的密码(当前root用户登录)。

        [root@srv ~]# passwd charles
        Changing password for user charles.
        New UNIX password:            #指定密码。

● 该提示是一个警告表示指定的密码太简单。在RHEL 5.x中只有root用户可以指定简单的密码,如果是一般用户该警告会是一个错误,一般用户必须重新指定一个复杂的密码。

        BAD PASSWORD: it is based on a dictionary word
        Retype new UNIX password:    #再次输入密码。
        passwd: all authentication tokens updated successfully.

● 更改当前用户的密码(当前使用“charles”用户登录)。

        [charles@srv ~]$ passwd
        Changing password for user charles.
        Changing password for charles
        (current) UNIX password:       #首先要输入当前的密码。
        New UNIX password:             #指定新的密码。
        Retype new UNIX password:     #再次输入新的密码。
        passwd: all authentication tokens updated successfully.

● 将用户“olivia”锁定。

        [root@srv ~]# passwd -l olivia
        Locking password for user olivia.
        passwd: Success

5.2.3 usermod:更改用户信息

usermod命令用于更改用户的信息,该命令语法如下。

        usermod [-LUa] [-e <日期>] [-l <用户名称>] [-u <UID>] [-d <目录>] [-g <用户组>] [-G <用
    户组…>] [-c <说明信息>] [-s <Shell>] 用户名

常用指数:

常用选项:

● 用户名:要更改信息的用户名。

● -c <说明信息>:更改用户的说明信息,这个就是“/etc/passwd”文件中第5列的说明内容。

● -d<目录>:更改用户家目录。

● -e <日期>:更改用户失效日期。指定日期的格式是“YYYY-MM-DD”,这个就是“/etc/shadow”文件中第8列的内容。

● -g<用户组>:用户组可以指定为一个已存在用户组的名称或GID,用于更改用户的初始组。

● -G<用户组…>:用户组可以指定为一个或多个已存在用户组的名称或GID,用于指定用户的额外组。如果指定多个额外组时,每个组之前使用“,”分隔。该选项会首先将指定用户原先的额外组全部删除。

● -a:追加该用户新的额外组,该选项使用时必须与“-G”选项一起使用。

● -l<用户名称>:修改指定用户的用户名。

● -s<Shell>:更改用户的登录Shell。

● -u<UID>:更改用户的UID。

● -L:锁定用户。

● -U:将锁定用户解锁。

usermod命令可以修改用户的相关信息,该命令只有root用户可以使用。在使用usermod命令时要注意修改后可能造成一个系统使用的问题。下面看几个usermod命令的例子。

● 将用户“jack”的说明信息修改为“24”。

        [root@srv ~]# usermod -c 24 jack

● 将用户“olivia”原有的额外组删除并为其增加一个名为“fringe”的额外组。

        [root@srv ~]# usermod -G fringe olivia

● 为“claire”用户增加一个名为“heroes”的新额外组。

        [root@srv ~]# usermod -aG heroes claire

5.2.4 userdel:删除用户

userdel命令用于删除用户,该命令语法如下。

        userdel [-r] 用户名

常用指数:

常用选项:

● 用户名:要删除的用户名。

● -r:删除用户家目录。

userdel命令用户删除用户,该命令只有root用户可以使用。如果不使用“-r”选项时,删除用户后会保留该用户家目录。下面看几个userdel命令的例子。

● 删除名为“nina”的用户,但保留其家目录。

        [root@srv ~]# userdel nina

● 删除名为“claire”的用户,同时删除其家目录。

        [root@srv ~]# userdel -r claire

5.2.5 groupadd:建立用户组

groupadd命令用于建立用户组,该命令语法如下。

        groupadd [-g <GID>] 用户组

常用指数:

常用选项:

● 用户组:要建立用户组的名称。

● -g <GID>:GID是一个整数,直接指定用户组的GID。在RHEL 5.x中如果不使用该选项时,用户组的GID会从500开始,每建立一个用户组该用户组的GID会增加1。

groupadd用于建立用户组。该命令执行完成后,信息将会保存在“/etc/group”文件中。该命令默认只有root用户可以使用。下面看几个groupadd命令的例子。

● 建立一个名为了“gossipgirl”的组。

        [root@srv ~]# groupadd gossipgirl

● 建立一个名为了“weeds”的组,并指定GID为“999”。

        [root@srv ~]# groupadd -g 999 weeds

5.2.6 groupmod:更改GID及组名称

groupmod命令用于更改GID及组名称,该命令语法如下。

        groupmod [-g <GID>] [-n <用户组名称>] 用户组

常用指数:

常用选项:

● 用户组:要更改用户组的名称。

● -n<用户组名称>:修改指定用户组的名称。

● -g<GID>:更改用户组的GID。

groupmod用于更改GID及用户组名称。下面看几个groupmod命令的例子。

● 将一个名为“olivia”的用户组名称改为“fringe”。

        [root@srv ~]# groupmod olivia -n fringe

5.2.7 groupdel:删除用户组

groupdel命令用于删除用户组,该命令语法如下。

        groupdel用户组

常用指数:

常用选项:

● 用户组:要删除的用户组名称。

groupdel命令用于删除用户组,如果某些用户的初始组是删除的用户组时,该用户组无法删除。下面看几个groupdel命令的例子。

● 删除一个名为“jack”的组,但用户组“jack”还是用户“jack”的初始组,而用户“jack”还存在所以不能删除该组。

        [root@srv ~]# groupdel jack
        groupdel: cannot remove user's primary group.

● 删除一个名为“gossipgirl”的组。

        [root@srv ~]# groupdel gossipgirl

5.2.8 chage:修改用户密码策略

chage命令用于修改用户密码策略,该命令语法如下。

        chage用户名

常用指数:

常用选项:

● 用户名:要修改用户密码策略的用户名称。

chage命令用于修改用户密码策略。下面看几个chage命令的例子。

● 修改名为“charles”用户的密码策略。

        [root@srv ~]# chage charles
        Changing the aging information for charles
        Enter the new value, or press ENTER for the default
                Minimum Password Age [0]:                    #密码最短更改时间,“0”表示不限制。
                Maximum Password Age [99999]:                #密码最长使用时间,“99999”表示不限制。
                Last Password Change (YYYY-MM-DD) [2010-02-14]:    #最近更动密码的日期。
                Password Expiration Warning [7]:                   #密码更改警告时间。
                Password Inactive [-1]:                            #密码过期的时间。
                Account Expiration Date (YYYY-MM-DD) [1969-12-31]:#用户失效日期。

5.2.9 finger:查找并显示用户信息

finger命令用于查找并显示用户信息,该命令语法如下。

        finger [-lmsp][用户名...]

常用指数:

常用选项:

● 用户名...:要查找并显示信息的用户名。

● -l:显示该用户的名称、用户说明信息、用户家目录、登录的Shell、登录时间、邮件地址、电子邮件状态、计划文件和方案文件内容。

● -m:不显示查找用户的用户说明信息。

● -s:显示该用户名称、用户说明信息、登录终端、闲置时间、登录时间及地址和电话。

● -p:显示该用户名称、用户说明信息、用户家目录、登录的Shell、登录时间、邮件地址、电子邮件状态,但不显示该用户的计划文件和方案文件内容。

finger命令会查找,并显示指定用户相关信息,如果不显示用户则会显示当前登录的所有用户的信息。下面看几个finger命令的例子。

● 查找并显示root用户的信息。

        [root@srv ~]# finger root
        Login: root                         Name: root
        Directory: /root                     Shell: /bin/bash
        On since Sun Feb 14 09:51 (CST) on pts/1 from 192.168.159.159
        On since Sun Feb 14 16:36 (CST) on pts/3 from 192.168.159.159
          10 minutes 31 seconds idle
        New mail received Sun Feb 14 10:382010 (CST)
            Unread since Wed Feb 10 02:122010 (CST)
        No Plan.

5.2.10 w:显示当前登录系统的用户及用户进程信息

w命令用于显示当前登录系统的用户及用户进程信息,该命令语法如下。

        w [-fhlsu] [用户名]

常用指数:

常用选项:

● 用户名:需要显示登录信息的用户名。

● -f:显示用户从何处登录,在RHEL 5.x中默认会使用该选项。

● -h:不显示各列标题行。

● -l:使用详细格式列表,在RHEL 5.x中默认会使用该选项。

● -s:使用简洁格式,不显示用户登录时间等信息。

● -u:忽略执行程序的名称,以及该程序使用CPU时间的信息。

w命令可以显示当前登录系统的用户及这些用户正在执行的程序。不指定用户名时会显示所有用户的信息,指定用户名后只显示指定用户的相关信息。下面看几个w命令的例子。

        [root@srv ~]# w

● 该行显示的内容分别表示:当前时间、系统启动到现在的时间、登录用户的数目、系统在最近1秒、5秒和15秒的平均负载。

        16:08:25 up  6:37,  2 users,  load average: 0.00, 0.00, 0.00

● 该行是标题行,从下一行开始才是显示的数据。其中每列分别表示:登录账号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。

        USER   TTY        FROM                LOGIN@    IDLE   JCPU    PCPU WHAT
        root     pts/1    192.168.159.159     09:51     0.00s  0.59s   0.01s w
        charles  pts/2    192.168.159.159     09:51     1:33m  0.06s   0.06s -bash

提示

JCPU时间指的是和该终端(TTY)连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间。而PCPU时间则是指当前进程(即在WHAT项中显示的进程)所占用的时间。

5.2.11 who:显示当前登录系统的用户信息

who命令用于显示当前登录系统的用户信息,该命令语法如下。

        who [ami] [-bdHlpqru]

常用指数:

常用选项:

● ami:只显示与自己相关的登录信息。

● -b:显示系统最后一次启动的时间。

● -d:显示死进程。

● -H:各列标题行。

● -l:显示登录进程号。

● -p:显示由init生成子进程。

● -q:显示登录的用户数。

● -r:当前的运行级别(有关运行级别见第10章)。

● -u:显示当前登录的用户。

who命令用于显示当前登录系统的用户信息。who命令不使用任何选项时会显示登录用户、使用的终端、登录时间、从何处登录。下面看几个who命令的例子。

● 显示当前登录系统的用户信息。

        [root@srv ~]# who
        root    pts/1       2010-02-14 09:51 (192.168.159.159)
        charles pts/2       2010-02-14 09:51 (192.168.159.159)

● 只显示与自己相关的登录信息。

        [root@srv ~]# whoami
        root

● 显示当前的运行级别。

        [root@srv ~]# who -r
                run-level 5  2010-02-14 09:31                 last=S

5.2.12 last:显示当前及过去登录系统的用户信息

last命令用于显示当前及过去登录系统的用户信息,该命令语法如下。

        last [-adRx] [- <显示列数>][用户名...][终端编号...]

常用指数:

常用选项:

● 终端编号...:只显示指定终端的登录信息。

● 用户名...:只显示指定用户的登录信息。

● -a:将从何处登录系统的主机名称或IP地址,显示在最后一行。

● -d:将IP地址转换成主机名称。

● -<显示列数>:设置列出名单的显示列数。

● -R:不显示登录系统的主机名称或IP地址。

● -x:显示系统关机,重新开机,以及执行等级的改变等信息。

last命令在默认情况下,会读取位于“/var/log”目录下的“wtmp”文件,并把该文件的内容记录的登录系统的用户信息显示。下面看几个last命令的例子。

● 显示当前及过去登录系统的用户信息,但只显示5行。

        root@srv ~]# last -5
        tonyzhan tty1                          Sun Feb 14 16:53   still logged in
        root    tty1                           Sun Feb 14 16:52-16:52  (00:00)
        root    pts/3        192.168.159.159   Sun Feb 14 16:36   still logged in
        root    pts/3        192.168.159.159   Sun Feb 14 15:50-15:50  (00:00)
        tonyzhan pts/2       192.168.159.159   Sun Feb 14 09:51   still logged in
        wtmp begins Fri Jan 29 19:35:412010

● 显示终端“tty1”的登录信息。

        [root@srv ~]# last tty1
        tonyzhan tty1                       Sun Feb 14 16:53   still logged in
        root    tty1                        Sun Feb 14 16:52-16:52  (00:00)
        wtmp begins Fri Jan 29 19:35:412010