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命令的符号连接,两者实际上是同一个指令,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ user [选项] 用户名 ] | |
-u UID | |
-g 组名 | |
-G 组名 | |
-d 目录 | |
-s 类型 | |
-M | |
-D | |
-m | |
-c | |
-r | |
-e | |
-f | |
-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命令用于设置用户的认证信息,包括用户密码、密码过期时间等,系统管理者则能用它管理系统用户的密码,只有管理者可以指定用户名称,一般用户只能变更自己的密码,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ passwd [选项] 用户名 ] | |
-u UID | |
--stdin | |
-l 用户名 | |
-u 用户名 | |
-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设定,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ usermod [选项] 用户名 ] | |
-u UID | |
-c | |
-d 目录 | |
-e | |
-f | |
-g 组名 | |
-G | |
-a | |
-l 新名 旧名 | |
-s shell | |
-u UID | |
-L | |
-U |
如果你仔细的比对,会发现 usermod 的选项与 useradd 非常类似,这是因为 usermod 也是用来微调 useradd 添加的使用者参数嘛,不过 usermod 还是有新增的选项,那就是 -L 与 -U,不过这两个选项其实与 passwd 的 -l,-u 是相同的.
实例1:使用 usermod -m -d /home/hello wang
参数将原wang家目录修改成hello.
[ | ]|
wang | |
[ | ]|
[ | ]|
hello |
实例2:使用 usermod -s /bin/bash
参数修改lyshark账户的默认shell.
[root@localhost ~]# usermod -s /bin/bash lyshark
◆userdel 删除用户◆
userdel命令用于删除给定的用户,以及与用户相关的文件,若不加选项,则仅删除用户帐号,而不删除相关文件,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ 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命令是用来修改帐号和密码的有效期限,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ 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命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ groupadd [选项] 组名 ] | |
-g | |
-r |
◆groupmod 修改属组◆
groupmod命令更改群组识别码或名称,需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ groupmod [选项] 组名 ] | |
-g | |
-n |
◆groupdel 删除属组◆
groupdel命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow,若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组,其参数我们会在下面进行说明.
[root@localhost ~]# groupdel --help | |
命令语法:[ groupdel [选项] 组名 ] |
◆gpasswd 添加成员◆
gpasswd命令是Linux下工作组文件/etc/group和/etc/gshadow管理工具,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ gpasswd [选项] 组名 ] | |
-a | |
-d | |
-A | |
-M | |
-r | |
-R |
实例1:使用 gpasswd -a
添加lyshark用户到root组.
[ | ]|
Adding user lyshark to group root |
实例2:使用 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命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ su - [选项] 用户名 ] | |
-c 指令 | |
-f | |
-l | |
-m | |
-s 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命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ w [选项] 用户名 ] | |
-h | |
-u | |
-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用户的登陆情况.
[ | ]|
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身份运行该命令,其参数我们会在下面进行说明.
[ | ]|
命令语法:[ lastlog [选项] [文件目录] ] | |
-b 天数 | |
-t 天数 | |
-u 用户名 |
实例1:使用 lastlog -u root
查询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那么容易使用,但功能非常完整,其参数我们会在下面进行说明.
[ | ]|
[ | ]|
命令语法:[ mail [选项] [用户] ] | |
-b 地址 | |
-c 地址 | |
-f 邮件文件 | |
-i | |
-I | |
-s 邮件主题 | |
-u 用户帐号 | |
h | |
d | |
s | |
q |
实例1:使用 mail
使用管道进行邮件发送.
[root@localhost ~] | |
You have new mail in /var/spool/mail/root |
实例2:使用 mail
使用文件进行邮件发送.
[ | ]|
You have new mail in /var/spool/mail/root |