该系列文章只是本人的学习笔记,文章中的文字描述提取自《Linux鸟哥私房菜》《Linux运维之道》等书中的重点内容,化繁为简能够在工作中快速复习掌握重点,并不代表个人立场,但转载请加出处,并注明参考文献。

好了,终于要到了管理 Linux 账号的时刻了,对于 Linux 有一定的熟悉度之后,再来就是要管理连上 Linux 的账号问题了,这个账号的问题可大可小,大到可以限制他使用 Linux 主机的各项资源,小到甚至一般账号的密码订定守则都可以进行规定,管理员的工作中,相当重要的一环就是『管理账号』啦,因为整个系统都是你在管理的,并且所有一般用户的账号申请,都必须要透过你的协助才行,所以你就必须要了解一下如何管理好一个服务器主机的账号啦,在管理 Linux 主机的账号时,我们必须先来了解一下 Linux 到底是如何辨别每一个使用者的.

关于Linux UID账号 (User Identity 用户标识号)

超级用户: UID=0

系统用户: UID=500-65535 最大:1000-65535

普通用户: UID:500-65535 最大:1000-65535

关于Linux GID账号 (Group Identify 组标识号)

初始组(私有组),附加组(公共组)

Linux 用户文件解析

虽然我们登陆 Linux 主机的时候,输入的是我们的账号,但是其实 Linux 主机并不会直接认识你的『账号名称』的,他仅认识 ID (ID 就是一组号码),由于计算机仅认识 0 与 1,所以主机对于数字比较有概念的,至于账号只是为了让人们容易记忆而已,而你的 ID 与账号的对应就在 /etc/passwd 当中,为了安全起见 Linux 把用户密码单独放在了 /etc/shadow 目录下,且权限是只允许root能够访问,下面我们来介绍一下其这两个配置文件的具体参数吧.

◆/etc/passwd◆

这个文件的构造是这样的,每一行都代表一个账号,有几行就代表有几个账号在你的系统中,不过需要特别留意的是,里头很多账号本来就是系统正常运行所必须要的,我们可以简称他为系统账号,例如 bin,daemon,adm,nobody 等,这些账号请不要随意的删除,这个文件的内容有点像下面这个样子.

[root@localhost ~]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
....省略....

我们先来看一下每个Linux系统都会有的第一行,就是root这个系统管理员那一行好了,你可以明显的看出来,每一行使用『:』分隔开,共有七个咚咚,分别是:

列号码 本列作用
第一列 用户名:就是账号,用来对应UID的:例如root的UID对应就是0
第二列 密码位:密码占位符,这个字段的密码数据在/etc/shadow中
第三列 用户UID:0=管理员,1-499=系统账户,500-65535=自定义账户
第四列 用户GID:也就是用户的组ID号,这个GID与/etc/group有关
第五列 用户描述信息:这一列可有可无,只是用来解释账号的意义而已
第六列 用户家目录:指定了用户的家目录保存位置,系统默认生成
第七列 登陆默认Shell:指明系统默认的登陆shell是什么

◆/etc/shadow◆

我们知道很多程序的运行都与权限有关,而权限与 UID/GID 有关,因此各程序当然需要读取 /etc/passwd 来了解不同账号的权限,因此 /etc/passwd 的权限需配置为 -rw-r--r-- 这样的情况,虽然早期的口令也有加密过,但却放置到 /etc/passwd 的第二个字段上,这样一来很容易被有心人士所窃取的,加密过的口令也能够透过暴力破解法去 try and error (试误) 找出来.

因为这样的关系,所以后来发展出将口令移动到 /etc/shadow 这个文件分隔开来的技术,而且还加入很多的口令限制参数在 /etc/shadow 里头,在这里,我们先来了解一下这个文件的构造吧,这个 /etc/shadow 文件有点像下面这样:

[root@localhost ~]# head -n 3 /etc/shadow
root:$6$TT4VWP5W$Libo7Yk8JzG15VQWKu:17699:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
....省略....

基本上,shadow 同样以『:』作为分隔符,如果数一数,会发现共有九个字段,这九个字段的用途是这样的:

列号码 本列作用
第一列 用户名:这个文件的第一栏就是账号,必须要与/etc/passwd相同才行
第二列 密码位:这个字段内的数据才是真正的口令,而且是经过加密的口令
第三列 密码最近更改时间:这个字段记录了『更改系统口令那一天』的日期
第四列 密码最短有效期:账号的口令在最近一次被更改后需要经过几天后才能再次更改
第五列 密码最长有效期:指定在最近一次更改口令后,经过多久需要再次更改的时间
第六列 密码到期前的警告天数:当账号口令过期时,系统会发出『警告』给这个账号
第七列 密码过期后的宽限天数:口令有效日期为『升级日期(第3字段)』+『重新变更日期(第5字段)』
第八列 密码失效时间:账号在此字段规定的日期之后,将无法再使用,默认是9999999
第九列 系统保留:此配置没有被使用,属于系统保留字段

## Linux 属组文件解析

认识了账号相关的两个文件 /etc/passwd 与 /etc/shadow 之后,你或许还是会觉得奇怪,那么群组的配置文件在哪里?还有在 /etc/passwd 的第四栏不是所谓的 GID 吗? 那又是啥? 此时就需要了解 /etc/group 与 /etc/gshadow 这两个配置文件喽.

◆/etc/group◆

这个文件就是在记录 GID 与组名的对应了,他主要是实现组用户的记录工作, /etc/group 内容有点像以下这样:

[root@localhost ~]# head -n 3 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
....省略....

这个文件每一行代表一个群组,也是以冒号『:』作为字段的分隔符,共分为四栏,每一字段的意义如下:

列号码 本列作用
第一列 组名称:就是组名,在新建用户的时候系统会为用户分配一个默认组.
第二列 密码占位符:通常不需要配置,这个配置通常是给『组管理员』使用的.
第三列 组ID号(GID):就是群组的 ID 号码.
第四列 成员列表:显示本组内的成员列表

◆/etc/gshadow◆

本配置文件用于存储组的密码,等相关信息/etc/gshadow的内容有点像这样:

[root@localhost ~]# head -n 3 /etc/gshadow
root:::
bin:::
daemon:::
....省略....

这个文件内同样还是使用冒号『:』来作为字段的分隔字符,而且你会发现,这个文件几乎与/etc/group一模一样,是这样没错不过,要注意的大概就是第二个字段,第二个字段是口令栏,如果口令栏上面是『!』时,表示该群组不具有群组管理员,至于第四个字段也就是支持的账号名称,这四个字段的意义为:

列号码 本列作用
第一列 用户组:就是组名,本配置文件必须与/etc/group文件相对应.
第二列 组密码:这个段可以是空的或!,如果是空的或有!,表示没有密码
第三列 组管理者:这个字段也可为空,如果有多个用户组管理者用,分割
第四列 组内成员:如果有多个成员用,号分割

以系统管理员的角度来说,这个 gshadow 最大的功能就是创建群组管理员啦,那么什么是群组管理员呢?由于系统上面的账号可能会很多,但是我们root可能平时太忙碌,所以当有使用者想要加入某些群组时,root或许会没有空管理,此时如果能够创建群组管理员的话,那么该群组管理员就能够将那个账号加入自己管理的群组中,可以免去root的忙碌啦.

Linux 用户管理命令

好啦!既然要管理账号,当然是由新增与移除使用者开始的啰~底下我们就分别来谈一谈如何新增、移除与更改用户的相关信息吧~

◆useradd 新建用户◆

useradd命令用于Linux中创建的新的系统用户,useradd可用来建立用户帐号,帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号,使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中,在Slackware中,adduser指令是个script程序,利用交谈的方式取得输入的用户帐号资料,然后再交由真正建立帐号的useradd命令建立新用户,如此可方便管理员建立用户帐号.在Red Hat Linux中,adduser命令则是useradd命令的符号连接,两者实际上是同一个指令,其参数我们会在下面进行说明.

[root@localhost ~]# useradd --help

命令语法:[ user [选项] 用户名 ]

        -u UID          #创建用户时指定UID号
-g 组名 #指定一个初始组
-G 组名 #加入一个附加组
-d 目录 #手动指定某目录为家目录
-s 类型 #指定默认Shell,默认/bin/bash
-M #强制不创建家目录
-D #查询默认配置参数
-m #强制创建家目录
-c #指定说明信息,可随便写
-r #创建一个系统的账号
-e #指定账号失效日期,格式为『YYYY-MM-DD』
-f #指定口令是否会失效,0为立刻失效
-1 #指定用户永远不失效

实例1:使用 useradd -M -r -s /sbin/nologin 参数创建一个系统用户.

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

[root@localhost ~]# cat /etc/passwd |grep lyshark
lyshark:x:997:995::/home/lyshark:/sbin/nologin

实例2:使用 useradd -G 参数创建用户并指定组.

[root@localhost ~]# groupadd admin
[root@localhost ~]# useradd -G admin wang [root@localhost ~]# cat /etc/group |grep wang
admin:x:1000:wang

关于useradd命令的拓展

其实系统已经帮我们规定好非常多的默认值了,所以我们可以简单的使用『 useradd 账号 』来创建使用者即可,这些默认值主要会帮我们处理几个项目:

在 /etc/passwd 里面创建一行与账号相关的数据,包括创建UID/GID/家目录等.

在 /etc/shadow 里面将此账号的口令相关参数填入,但是尚未有口令.

在 /etc/group 里面加入一个与账号名称一模一样的组名.

在 /home 底下创建一个与账号同名的目录作为用户家目录,且权限为700.

那么我们在创建默认用户的时候也会参考一些配置文件,来完成默认参数的配置,现在我们可以使用下面的命令来直接获取默认配置参数.

[root@localhost ~]# useradd -D

GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

这个数据其实是由/etc/default/useradd参数读取出来的,你可以自行用VIM去观察该文件的内容,搭配上头刚刚谈过的运行结果,上面这些配置项目所造成的行为分别是:

[root@localhost ~]# vim /etc/default/useradd

GROUP=100

#新创建用户时默认初始组的GID号(公有组机制)
#现在使用的是私有组机制(根据创建用户名称创建组) HOME=/home
#新创建用户的家目录的默认位置 INACTIVE=-1
#密码过期后宽限天数(过期停权),用天数表示:0代表密码到期立刻失效;正数代表密码到期后的宽限天数;-1 表示密码永不失效。 EXPIRE=
#密码失效时间,此处写时间戳,到达时间戳时间后立刻失效,不填写表示用户密码永不过期。 SHELL=/bin/bash
#此选项是创建用户时默认的shell类型,/bin/bash 表示可以登录系统 SKEL=/etc/skel
#此选项是创建用户时使用的模板目录,/etc/skel中的文件在用户创建时都会被复制到用户家目录下。 GREATE_MAIL_SPOOL=yes
#此选项是是否给新用户创建邮件缓冲(即新邮箱)
[root@localhost ~]# vim /etc/login.defs

MAIL_DIR /var/spool/mail
#指定新用户的默认邮箱位置。比如xdl用户的邮箱目录位置:/var/spool/mail/lyshark PASS_MAX_DAYS 99999
#这行指定的是密码的有效期,也就是/etc/shadow文件的第五字段。代表多少天之后必须修改密码,默认值是99999 PASS_MIN_DAYS 0
#这行指定的是两次密码的修改间隔时间,也就是/etc/shadow文件的第四字段。代表第一次修改密码之后,几天后才能再次修改密码。默认值是0 PASS_MIN_LEN 5
#这行代表密码的最小长度,默认不小于5位。但是我们现在用户登录时验证已经被PAM模块取代,所以这个选项并不生效 PASS_WARN_AGE 7
#这行代表密码修改到期前的警告天数,也就是/etc/shadow文件的第六字段。代表密码到底有效期前多少天开始进行警告提醒,默认值是7天 UID_MIN 500
#创建普通用户的时候默认的起始UID号 UID_MAX 60000
#创建普通用户,不用-u 指定时,默认最大的UID号。
#注:假如有一个用户创建时通过 -u 指定了 UID 为 550,那么下一次不指定-u 时,则起始UID 变成从551开始,500-549之间的那些会跳过不使用。 GID_MIN 500
#创建组的时候默认的起始GID号 GID_MAX 60000
#创建组的时候默认的最大的GID号 CREATE_HOME yes
#创建用户时是否创建用户家目录默认 yes 创建 UMASK 077
#这行指定的是建立的用户家目录的默认权限,因为umask值是077,所以新建的用户家目录的权限是700 USERGROUPS_ENAB yes
#这行指定的是使用命令userdel删除用户时,是否删除用户的初始组,默认是删除 ENCRYPT_METHOD SHA512
#这行指定Linux用户的密码使用SHA512散列模式加密,这是新的密码加密模式,原先的Linux只能用DES或MD5方式加密

现在你知道啦,使用 useradd 这支程序在创建 Linux 上的账号时,至少会参考:

/etc/default/useradd

/etc/login.defs

/etc/skel/*

这些文件,不过最重要的其实是创建 /etc/passwd,/etc/shadow,/etc/group,/etc/gshadow还有用户家目录就是了~所以,如果你了解整个系统运行的状态,也是可以手动直接修改这几个文件就是了.

◆passwd 设置密码◆

passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等,系统管理者则能用它管理系统用户的密码,只有管理者可以指定用户名称,一般用户只能变更自己的密码,其参数我们会在下面进行说明.

[root@localhost ~]# passwd --help

命令语法:[ passwd [选项] 用户名 ]

        -u UID          #创建用户时指定UID号
--stdin #非交互给予密码
-l 用户名 #锁定用户,使之无法登陆,会将 /etc/shadow 第二栏最前面加上 ! 使口令失效.
-u 用户名 #解锁用户,是 Unlock 的意思
-S 用户名 #查看用户账号状态(是否被锁定).
-n #后面接天数,多久不可修改口令天数
-x #后面接天数,多久内必须要更动口令
-w #后面接天数,口令过期前的警告天数
-i #后面接『日期』,口令失效日期

实例1:使用 echo |passwd --stdin 参数非交互设置密码.

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

Changing password for user lyshark.
passwd: all authentication tokens updated successfully.

实例2:使用 passwd 参数修改lyshark用户的密码.

[root@localhost ~]# passwd lyshark

Changing password for user lyshark.
New password: 123123
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 123123
passwd: all authentication tokens updated successfully.

root果然是最伟大的人物,当我们要给予用户口令时,通过root来配置即可,root可以配置各式各样的口令,系统几乎一定会接受,所以如同上面的范例,明明输入的口令太短了,但是系统依旧可接受123123这样的口令配置.

◆usermod 管理用户◆

usermod命令用于修改用户的基本信息,usermod命令不允许你改变正在线上的使用者帐号名称,当usermod命令用来改变userid,必须确认这名user没在电脑上执行任何程序,你需手动更改使用者的crontab,也需手动更改使用者的at工作,采用NIS server须在server上更动相关的NIS设定,其参数我们会在下面进行说明.

[root@localhost ~]# usermod --help

命令语法:[ usermod [选项] 用户名 ]

        -u UID          #创建用户时指定UID号
-c #后面加账号说明
-d 目录 #结合 -m 直接对家目录进行改名
-e #后面接日期,格式是 YYYY-MM-DD
-f #后面接天数
-g 组名 #修改指定初始组
-G #修改指定附加组
-a #与 -G 合用,添加次要组
-l 新名 旧名 #修改用户名
-s shell #修改默认Shell
-u UID #修改用户的指定UID
-L #冻结指定用户,让其无法登陆
-U #解除冻结

如果你仔细的比对,会发现 usermod 的选项与 useradd 非常类似,这是因为 usermod 也是用来微调 useradd 添加的使用者参数嘛,不过 usermod 还是有新增的选项,那就是 -L 与 -U,不过这两个选项其实与 passwd 的 -l,-u 是相同的.

实例1:使用 usermod -m -d /home/hello wang 参数将原wang家目录修改成hello.

[root@localhost home]# ls
wang
[root@localhost home]# usermod -m -d /home/hello wang [root@localhost home]# ls
hello

实例2:使用 usermod -s /bin/bash 参数修改lyshark账户的默认shell.

[root@localhost ~]# usermod -s /bin/bash lyshark

◆userdel 删除用户◆

userdel命令用于删除给定的用户,以及与用户相关的文件,若不加选项,则仅删除用户帐号,而不删除相关文件,其参数我们会在下面进行说明.

[root@localhost ~]# userdel --help

命令语法:[ userdel [选项] 用户名 ]

        -f              #强制删除用户,即使用户已登陆
-r #同时删除家目录

这个功能就太简单了,目的在删除用户的相关数据,而用户的数据有:

用户账号/口令相关参数:/etc/passwd, /etc/shadow

使用者群组相关参数:/etc/group, /etc/gshadow

用户个人文件数据: /home/username, /var/spool/mail/username..

这个命令下达的时候要小心了,通常我们要移除一个账号的时候,你可以手动的将 /etc/passwd 与 /etc/shadow 里头的该账号取消即可,一般而言,如果该账号只是『暂时不激活』的话,那么将 /etc/shadow 里头账号失效日期 (第八字段) 配置为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来,使用userdel的时候通常是『你真的确定不要让该用户在主机上面使用任何数据了』

◆chage 查询参数◆

chage命令是用来修改帐号和密码的有效期限,其参数我们会在下面进行说明.

[root@localhost ~]# chage --help

命令语法:[ chage [选项] 用户名 ]

        -m              #密码可更改的最小天数
-M #密码保持有效的最大天数
-w #用户密码到期前警告天数
-E #帐号到期时间
-d #上一次更改的日期
-l #列出该账号的详细口令参数
chage -d 0 #强制用户下次登陆修改密码

实例1:使用 chage -d 0 lyshark 强制用户下次登陆修改密码.

[root@localhost ~]# chage -l lyshark
Last password change : Nov 14, 2018
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7 [root@localhost ~]# chage -d 0 lyshark [root@localhost ~]# chage -l lyshark
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7

## Linux 属组管理命令

了解了账号的新增、删除、更动与查询后,再来我们可以聊一聊群组的相关内容了,基本上,群组的内容都与这两个文件有关:/etc/group,/etc/gshadow,群组的内容其实很简单,都是上面两个文件的新增、修改与移除而已,不过如果再加上有效群组的概念,那么gpasswd则不可不知呢.

◆groupadd 添加属组◆

groupadd命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中,其参数我们会在下面进行说明.

[root@localhost ~]# groupadd --help

命令语法:[ groupadd [选项] 组名 ]

        -g              #指定组GID
-r #创建系统群组

◆groupmod 修改属组◆

groupmod命令更改群组识别码或名称,需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作,其参数我们会在下面进行说明.

[root@localhost ~]# groupmod --help

命令语法:[ groupmod [选项] 组名 ]

        -g              #修改原有的GID数字
-n #修改原有的组名

◆groupdel 删除属组◆

groupdel命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow,若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组,其参数我们会在下面进行说明.

[root@localhost ~]# groupdel --help

命令语法:[ groupdel [选项] 组名 ]

◆gpasswd 添加成员◆

gpasswd命令是Linux下工作组文件/etc/group和/etc/gshadow管理工具,其参数我们会在下面进行说明.

[root@localhost ~]# gpasswd --help

命令语法:[ gpasswd [选项] 组名 ]

        -a              #添加用户到组
-d #从组删除用户
-A #指定管理员
-M #指定组成员
-r #删除密码
-R #限制用户登入组

实例1:使用 gpasswd -a 添加lyshark用户到root组.

[root@localhost ~]# gpasswd -a lyshark root

Adding user lyshark to group root

实例2:使用 gpasswd -d 从lyshark组中删除root.

[root@localhost ~]# gpasswd -d lyshark root

Removing user lyshark from group root

实例3:使用 gpasswd -M 批量将用户 a1,a2,a3,a4 添加到test组.

[root@localhost ~]# useradd a1
[root@localhost ~]# useradd a2
[root@localhost ~]# useradd a3
[root@localhost ~]# useradd a4
[root@localhost ~]# groupadd test [root@localhost ~]# gpasswd -M a1,a2,a3,a4 test root@localhost ~]# cat /etc/group |grep test
test:x:1008:a1,a2,a3,a4

## Linux 用户查询命令

谈了这么多的账号问题,总是该要谈一谈,那么如何针对系统上面的用户进行查询吧?想几个状态,如果你在Linux上面操作时,刚好有其他的用户也登陆主机,你想要跟他对谈,该如何是好,你想要知道某个账号的相关信息,该如何查阅,下面我们就来看一看具体的查询技巧吧.

◆su 切换身份命令◆

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码,其参数我们会在下面进行说明.

[root@localhost ~]# su --help

命令语法:[ su - [选项] 用户名 ]

        -c 指令          #执行完指定的指令后,即恢复原来的身份
-f #使shell不用去读取启动文件
-l #改变身份时连同环境变量一起切换
-m #改变身份不同步环境变量
-s shell #指定要执行的shell

实例1:使用 su -c 执行指令后自动退出.

[root@localhost ~]# su -c id lyshark

uid=1000(lyshark) gid=1000(lyshark) groups=1000(lyshark)

◆id 查询用户信息◆

id命令可以显示真实有效的用户ID(UID)和组ID(GID),UID 是对一个用户的单一身份标识,组ID(GID)则对应多个UID,id命令已经默认预装在大多数Linux系统中,要使用它,只需要在你的控制台输入id,其参数我们会在下面进行说明.

[root@localhost ~]# id --help

命令语法:[ id [选项] 用户名 ]

        -g              #显示用户所属群组的ID
-G #显示用户所属附加群组的ID
-n #显示用户,所属群组或附加群组的名称.
-r #显示实际ID
-u #显示用户ID

实例1:使用 id 命令查询指定用户.

[root@localhost ~]# id lyshark

uid=1000(lyshark) gid=1000(lyshark) groups=1000(lyshark)

◆w 显示登陆用户列表◆

w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令,执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序,单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息,其参数我们会在下面进行说明.

[root@localhost ~]# w --help

命令语法:[ w [选项] 用户名 ]

        -h              #不打印头信息
-u #当显示当前进程和cpu时间时忽略用户名
-s #使用短输出格式
-f #显示用户从哪登录

实例1:使用 w 命令查看系统正在登陆的用户.

[root@localhost ~]# w

 14:40:07 up 3 min,  2 users,  load average: 0.03, 0.09, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.20 14:37 7.00s 0.10s 0.00s w
lyshark pts/1 192.168.1.20 14:38 1:59 0.01s 0.01s -bash

实例2:使用 w -h lyshark 命令查看lyshark用户的登陆情况.

[root@localhost ~]# w -h lyshark
lyshark pts/1 192.168.1.20 14:38 4:31 0.01s 0.01s -bash

◆who 显示登录系统信息◆

who命令是显示目前登录系统的用户信息,执行who命令可得知目前有那些用户登入系统,单独执行who命令会列出登入帐号,使用的终端机,登入时间以及从何处登入或正在使用哪个显示器,其参数我们会在下面进行说明.

[root@localhost ~]# who --help

命令语法:[ who [选项] ]

        -H              #显示各栏位的标题信息列
-u #显示用户闲置时间(1分钟内无操作显示. 24小时不操作显示old)
-m #与 who am i 参数效果相同
-q #只显示登入系统的帐号名称和总人数
-s #只负责解决兼容性问题
-w #显示用户的信息状态栏

实例1:使用 who -q 命令查看系统登录用户总人数.

[root@localhost ~]# who -q

root lyshark admin users wangrui
# users=5

◆last 显示用户最近登录信息◆

last命令用于显示用户最近登录信息,单独执行last命令,它会读取/var/log/wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来,其参数我们会在下面进行说明.

[root@localhost ~]# last --help

命令语法:[ last [选项] [文件目录] ]

        -H              #显示各栏位的标题信息列
-a #把从何处登入系统的主机名称或IP,显示在最后一行
-d #将IP地址转换成主机名称
-f 记录文件 #指定记录文件
-n 显示条数 #设置列出名单的显示列数
-R #不显示登入系统的主机名称或IP地址
-x #显示系统关机,重新开机,以及执行等级的改变等信息

实例1:使用 last -f /var/log/wtmp 指定一个读取文件,来打印.

[root@localhost ~]# last -f /var/log/wtmp

lyshark  pts/1        192.168.1.20     Wed Nov 14 14:38   still logged in
root pts/0 192.168.1.20 Wed Nov 14 14:37 still logged in
reboot system boot 3.10.0-862.el7.x Wed Nov 14 14:36 - 14:57 (00:21)
root pts/0 192.168.1.8 Tue Nov 6 11:02 - crash (8+03:34)
....省略....
wtmp begins Sat Oct 13 12:39:18 2018

实例2:使用 last -n 4 命令显示前4行数据.

[root@localhost ~]# last -n 4
lyshark pts/1 192.168.1.20 Wed Nov 14 14:38 still logged in
root pts/0 192.168.1.20 Wed Nov 14 14:37 still logged in
reboot system boot 3.10.0-862.el7.x Wed Nov 14 14:36 - 14:58 (00:22)
root pts/0 192.168.1.8 Tue Nov 6 11:02 - crash (8+03:34) wtmp begins Sat Oct 13 12:39:18 2018

◆lastlog 显示最后登陆信息◆

lastlog命令用于显示系统中所有用户最近一次登录信息.

lastlog文件在每次有用户登录时被查询,可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log/lastlog的内容,它根据UID排序显示登录名、端口号(tty)和上次登录时间,如果一个用户从未登录过,lastlog显示 Never logged,注意需要以root身份运行该命令,其参数我们会在下面进行说明.

[root@localhost ~]# lastlog --help

命令语法:[ lastlog [选项] [文件目录] ]

        -b 天数         #显示指定天数前的登录信息
-t 天数 #显示指定天数以来的登录信息
-u 用户名 #显示指定用户的最近登录信息

实例1:使用 lastlog -u root 查询root的最后登录日期.

[root@localhost ~]# lastlog -u root

Username         Port     From             Latest
root pts/0 192.168.1.20 Wed Nov 14 14:37:27 -0500 2018

## Linux 用户对话命令

◆write 在线发送提示◆

write命令用于向指定登录用户终端上发送信息,通过write命令可传递信息给另一位登入系统的用户,当输入完毕后,键入EOF表示信息结束,write命令就会将信息传给对方,如果接收信息的用户不只登入本地主机一次,你可以指定接收信息的终端机编号.

实例1:使用 write 给lyshark用户发送消息.

[root@localhost ~]# echo "hello lyshark" | write lyshark

实例2:使用 write 给lyshark用户无线发送乱码.

while true
do
cat /var/log/messages |base64 |write lyshark
done

注意:若对方设定mesg n 则此时信息将无法传给对方.

◆wall 给所有人通知◆

wall命令用于向系统当前所有打开的终端上输出信息,通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户.

实例1:使用 wall 给全部用户发送消息.

[root@localhost ~]# wall hello linux admin
[root@localhost ~]# Broadcast message from root@localhost.localdomain (pts/0) (Wed Nov 14 15:28:01 2018): hello linux admin

◆mail 发送邮件◆

mail命令是命令行的电子邮件发送和接收工具,操作的界面不像elm或pine那么容易使用,但功能非常完整,其参数我们会在下面进行说明.

[root@localhost ~]# yum install -y mailx
[root@localhost ~]# mail --help 命令语法:[ mail [选项] [用户] ] -b 地址 #指定密件副本的收信人地址
-c 地址 #指定副本的收信人地址
-f 邮件文件 #读取指定邮件文件中的邮件
-i #不显示终端发出的信息
-I #使用互动模式
-s 邮件主题 #指定邮件的主题
-u 用户帐号 #读取指定用户的邮件 h #列出信件表头
d #删除邮件
s #将邮件保存成文件
q #退出

实例1:使用 mail 使用管道进行邮件发送.

[root@localhost ~]# echo "hello,this is the content of mail." |mail -s "by root" lyshark

You have new mail in /var/spool/mail/root

实例2:使用 mail 使用文件进行邮件发送.

[root@localhost ~]# mail -s "by root" admin@mkdirs.com < mail.txt

You have new mail in /var/spool/mail/root

参考文献:Linux鸟哥私房菜,Linux运维之道

Linux系统用户与属组管理(3)的更多相关文章

  1. linux系统用户管理(一)

    Linux系统用户管理1.用户管理*****2.Linux用户命令****3.用户创建的原理***4.密码管理***5.组命令管理**6.身份切换*****7.sudo提升权限***** 我们现在所使 ...

  2. 实验三:Linux系统用户管理及VIM配置

    项目 内容 这个作业属于哪个课程 班级课程的主页链接 这个作业的要求在哪里 作业要求链接地址 学号-姓名 17043133-木腾飞 学习目标 1.学习Linux系统用户管理2.学习vim使用及配置 实 ...

  3. 实验三 Linux系统用户管理及VIM配置

    项目 内容 这个作业属于哪个课程 班级课程的主页链接 这个作业的要求在哪里 作业要求链接接地址 学号-姓名 17041428-朱槐健 作业学习目标  1.学习Linux系统用户管理 2.学习vim使用 ...

  4. linux的用户、群组

    1.      用户及passwd文件 1)      掌握/etc/passwd文件的功能:存储所有用户的相关信息,该文件也被称为用户信息数据库(Database). 2)      /etc/pa ...

  5. shell实现增加删除Linux系统用户脚本(密码为随机)

    README shell环境下运行脚本,根据需求选择相应的功能. List \t\t create the userlist 这一步是必须执行的,脚本会识别本地当前目录下的文件 Useradd \t\ ...

  6. Linux系统用户/用户组/文件权限相关

    目录一.Linux系统用户/用户组权限相关二.Linux系统文件权限相关 一.Linux系统用户/用户组权限相关 .命令:usermod 用法:usermod [-agGus] user args ‘ ...

  7. 第五部分 linux系统管理员 开机流程 模组管理 与loader

    第五部分   linux系统管理员  开机流程  模组管理  与loader   开机流程分析 cmos保存电脑硬件的参数 bios 基本的输入输出系统  读取硬件的软件 MBR  master bo ...

  8. linux 中将用户添加到组的 4 个方法

    Linux 组是用于管理 Linux 中用户帐户的组织单位.对于 Linux 系统中的每一个用户和组,它都有惟一的数字标识号.它被称为 用户 ID(UID)和组 ID(GID).组的主要目的是为组的成 ...

  9. 【转】linux 设置用户id 设置组id

    linux 设置用户id 设置组id   转自 linux 设置用户id 设置组id   最近看apue,简单记录对设置用户id理解(设置组id同理). 1. 相关的id好像很多,共有哪些? 文件2个 ...

随机推荐

  1. js网页上画图

    保存 1.d3.js  (http://www.d3.org/)使用svg技术,展示大数据量,动态效果很好,但是API暴露的不好,得靠自己摸索. 2.http://raphaeljs.com/refe ...

  2. NOIP2017提高组预赛详解

    NOIP2017预赛终于结束了. 普遍反映今年的卷子难度较大,但事实上是这样吗?马上我将为您详细地分析这张试卷,这样你就能知道到底难不难. 对了答案,鄙人考得还是太差了,只有91分. 那么下面我们就一 ...

  3. GUI的最终选择Tkinter模块练习篇

    一.Canvas画布练习 1)简单的绘制图框 from tkinter import * # 构建一个窗口 tk = Tk() # 画布 canvas= Canvas(tk,width=,height ...

  4. Java数组的初始化

    1.动态初始化 数据类型 [] 变量名 = new 数据类型 [数组大小]; //数组的动态初始化 int [] arr = new int [3]; 2.静态初始化 数据类型 [] 变量名 = {元 ...

  5. timerfd与eventfd

    1.timerfd timerfd是定时器描述符,通过timerfd_create()来创建它,timerfd_settime()来设置定时器时间,当时间到期定时器文件描述符就可读,所以能够在sele ...

  6. boost-使用property_tree来解析xml、json

    property_tree是一个保存了多个属性值的树形数据结构,可以用来解析xml.json.ini.info文件.要使用property_tree和xml解析组件的话需要包含"boost/ ...

  7. OSI七层模型和TCP/IP四层模型

    1)网络层负责点到点的传输(这里的“点”指主机或路由器),而传输层负责端到端的传输(这里的“端”指应用进程) 2)ARP协议介于数据链路层和网络层之间(IPv4专有,IPv6的地址映射功能在ICMPv ...

  8. Mybatis-Plus 实战完整学习笔记(六)------select测试一

    查询方法(3.0.3) 1.查询一个员工的数据 @Test public void selectMethod() throws SQLException { // 根据ID获取一个对象的数据 Empl ...

  9. hadoop集群的三种运行模式

    单机(本地)模式: 这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统.在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM上.这里同样没有D ...

  10. Unicode 字符

    Unicode是计算机可以支持这个星球上多种语言的秘密武器.在Unicode之前,用的都是ASCII. ASCII码非常简单,每个英文都是7位二进制的方式存贮在计算机内,其范围是32~126.当用户在 ...