13.6 Linux主机上的使用者讯息传递
谈了这么多的帐号问题,总是该要谈一谈,那么如何针对系统上面的使用者进行查询吧? 想几个状态,如果你在 Linux 上面操作时,刚好有其他的使用者也登陆主机,你想要跟他对谈,该如何是好? 你想要知道某个帐号的相关信息,该如何查阅?呼呼!下面我们就来聊一聊~
13.6.1 查询使用者: w, who, last, lastlog
如何查询一个使用者的相关数据呢?这还不简单,我们之前就提过了 [id], [finger]等指令了,都可以让您了解到一个使用者的相关信息啦!那么想要知道使用者到底啥时候登陆呢? 最简单可以使用 last 检查啊!这个玩意儿我们也在 [第十章 bash] 提过了, 您可以自行前往参考啊!简单的很。
Tips 早期的 Red Hat 系统的版本中, last 仅会列出当月的登陆者信息,不过在我们的 CentOS 5.x 版以后, last 可以列出从系统创建之后到目前为止的所有登陆者信息!这是因为登录文件轮替的设置不同所致。 详细的说明可以参考后续的[第十八章登录文件简介]。
那如果你想要知道目前已登陆在系统上面的使用者呢?可以通过 w 或 who 来查询喔!如下范例所示:
另外,如果您想要知道每个帐号的最近登陆的时间,则可以使用 lastlog 这个指令喔! lastlog 会去读取 /var/log/lastlog 文件,结果将数据输出如下表:
这样就能够知道每个帐号的最近登陆的时间啰~ ^_^
13.6.2 使用者对谈: write, mesg, wall
那么我是否可以跟系统上面的使用者谈天说地呢?当然可以啦!利用 write 这个指令即可。 write 可以直接将讯息传给接收者啰!举例来说,我们的 Linux 目前有 vbird1 与 root 两个人在线上, 我的 root 要跟 vbird1 讲话,可以这样做:
怪怪~立刻会有讯息回应给 vbird1 !不过......当时 vbird1 正在查数据,哇! 这些讯息会立刻打断 vbird1 原本的工作喔!所以,如果 vbird1 这个人不想要接受任何讯息,直接下达这个动作:
不过,这个 mesg 的功能对 root 传送来的讯息没有抵挡的能力!所以如果是 root 传送讯息, vbird1 还是得要收下。 但是如果 root 的 mesg 是 n 的,那么 vbird1 写给 root 的信息会变这样:
了解乎?如果想要解开的话,再次下达“ mesg y ”就好啦!想要知道目前的 mesg 状态,直接下达“ mesg ”即可!瞭呼? 相对于 write 是仅针对一个使用者来传“简讯”,我们还可以“对所有系统上面的使用者传送简讯 (广播)”哩~ 如何下达?用 wall 即可啊!他的语法也是很简单的喔!
然后你就会发现所有的人都会收到这个简讯呢!连发送者自己也会收到耶!
13.6.3 使用者邮件信箱: mail
使用 wall, write 毕竟要等到使用者在线上才能够进行,有没有其他方式来联络啊? 不是说每个 Linux 主机上面的使用者都具有一个 mailbox 吗? 我们可否寄信给使用者啊!呵呵!当然可以啊!我们可以寄、收 mailbox 内的信件呢! 一般来说, mailbox 都会放置在 /var/spool/mail 里面,一个帐号一个 mailbox (文件)。 举例来说,我的 vbird1 就具有 /var/spool/mail/vbird1 这个 mailbox 喔!
那么我该如何寄出信件呢?就直接使用 mail 这个指令即可!这个指令的用法很简单的,直接这样下达:“ mail -s "邮件标题" username@localhost ”即可! 一般来说,如果是寄给本机上的使用者,基本上,连“ @localhost ”都不用写啦! 举例来说,我以 root 寄信给 vbird1 ,信件标题是“ nice to meet you ”,则:
如此一来,你就已经寄出一封信给 vbird1 这位使用者啰,而且,该信件标题为: nice to meet you,信件内容就如同上面提到的。不过,你或许会觉得 mail 这个程序不好用~ 因为在信件编写的过程中,如果写错字而按下 Enter 进入次行,前一行的数据很难删除ㄟ! 那怎么办?没关系啦!我们使用数据流重导向啊!呵呵!利用那个小于的符号 ( < ) 就可以达到取代键盘输入的要求了。也就是说,你可以先用 vi 将信件内容编好, 然后再以 mail -s "nice to meet you" vbird1 < filename 来将文件内容传输即可。
例题:请将你的主文件夹下的环境变量文件 (~/.bashrc) 寄给自己!答:mail -s "bashrc file content" dmtsai < ~/.bashrc例题:通过管线命令直接将 ls -al ~ 的内容传给 root 自己!答:ls -al ~ | mail -s "myfile" root
刚刚上面提到的是关于“寄信”的问题,那么如果是要收信呢?呵呵!同样的使用 mail 啊! 假设我以 vbird1 的身份登陆主机,然后输入 mail 后,会得到什么?
在 mail 当中的提示字符是 & 符号喔,别搞错了~输入 mail 之后,我可以看到我有一封信件, 这封信件的前面那个 > 代表目前处理的信件,而在大于符号的右边那个 N 代表该封信件尚未读过, 如果我想要知道这个 mail 内部的指令有哪些,可以在 & 之后输入“ ? ”,就可以看到如下的画面:
<message list> 指的是每封邮件的左边那个数字啦!而几个比较常见的指令是:
h
列出信件标头;如果要查阅 40 封信件左右的信件标头,可以输入“ h 40 ”
d
删除后续接的信件号码,删除单封是“ d10 ”,删除 20~40 封则为“ d20-40 ”。 不过,这个动作要生效的话,必须要配合 q 这个指令才行(参考下面说明)!
s
将信件储存成文件。例如我要将第 5 封信件的内容存成 ~/mail.file:“s 5 ~/mail.file”
x
或者输入 exit 都可以。这个是“不作任何动作离开 mail 程序”的意思。 不论你刚刚删除了什么信件,或者读过什么,使用 exit 都会直接离开 mail,所以刚刚进行的删除与阅读工作都会无效。 如果您只是查阅一下邮件而已的话,一般来说,建议使用这个离开啦!除非你真的要删除某些信件。
q
相对于 exit 是不动作离开, q 则会实际进行你刚刚所执行的任何动作 (尤其是删除!)
旧版的 CentOS 在使用 mail 读信后,通过 q 离开始,会将已读信件移动到 ~/mbox 中,不过目前 CentOS 7 已经不这么做了! 所以离开 mail 可以轻松愉快的使用 q 了呢!
Last updated