谈了这么多的账号问题,总是该要谈一谈,那么如何针对系统上面的用户进行查询吧?
想几个状态,如果你在 Linux 上面操作时,刚好有其他的用户也登陆主机,你想要跟他对谈,该如何是好?
你想要知道某个账号的相关信息,该如何查阅?呼呼!底下我们就来聊一聊~
查询使用者:
w, who, last, lastlog
如何查询一个用户的相关数据呢?这还不简单,我们之前就提过了 id,
finger 等命令了,都可以让您了解到一个用户的相关信息啦!那么想要知道使用者到底啥时候登陆呢?
最简单可以使用 last 检查啊!这个玩意儿我们也在 第十一章 bash 提过了,
您可以自行前往参考啊!简单的很。
Tips: 早期的 Red Hat 系统的版本中, last 仅会列出当月的登陆者信息,不过在我们的 CentOS 5.x 版以后,
last 可以列出从系统创建之后到目前为止的所有登陆者信息!这是因为登录档轮替的配置不同所致。
详细的说明可以参考后续的第十九章登录档简介。
| |
那如果你想要知道目前已登陆在系统上面的用户呢?可以透过 w 或 who 来查询喔!如下范例所示:
[root@www ~]# w
13:13:56 up 13:00, 1 user, load average: 0.08, 0.02, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.1.100 11:04 0.00s 0.36s 0.00s -bash
vbird1 pts/2 192.168.1.100 13:15 0.00s 0.06s 0.02s w
# 第一行显示目前的时间、启动 (up) 多久,几个用户在系统上平均负载等;
# 第二行只是各个项目的说明,
# 第三行以后,每行代表一个使用者。如上所示,root 登陆并取得终端机名 pts/1 之意。
[root@www ~]# who
root pts/1 2009-03-04 11:04 (192.168.1.100)
vbird1 pts/2 2009-03-04 13:15 (192.168.1.100)
|
另外,如果您想要知道每个账号的最近登陆的时间,则可以使用 lastlog 这个命令喔!
lastlog 会去读取 /var/log/lastlog 文件,结果将数据输出如下表:
[root@www ~]# lastlog
Username Port From Latest
root pts/1 192.168.1.100 Wed Mar 4 11:04:22 +0800 2009
bin **Never logged in**
....(中间省略)....
vbird1 pts/2 192.168.1.100 Wed Mar 4 13:15:56 +0800 2009
....(以下省略)....
|
这样就能够知道每个账号的最近登陆的时间啰~ ^_^
使用者对谈: write, mesg, wall
那么我是否可以跟系统上面的用户谈天说地呢?当然可以啦!利用 write 这个命令即可。
write 可以直接将信息传给接收者啰!举例来说,我们的 Linux 目前有 vbird1 与 root 两个人在在线,
我的 root 要跟 vbird1 讲话,可以这样做:
[root@www ~]# write 使用者账号 [用户所在终端接口]
[root@www ~]# who
root pts/1 2009-03-04 11:04 (192.168.1.100)
vbird1 pts/2 2009-03-04 13:15 (192.168.1.100) <==有看到 vbird1 在在线
[root@www ~]# write vbird1 pts/2
Hello, there:
Please don't do anything wrong... <==这两行是 root 写的信息!
# 结束时,请按下 [crtl]-d 来结束输入。此时在 vbird1 的画面中,会出现:
Message from root@www.vbird.tsai on pts/1 at 13:23 ...
Hello, there:
Please don't do anything wrong...
EOF
|
怪怪~立刻会有信息响应给 vbird1 !不过......当时 vbird1 正在查数据,哇!
这些信息会立刻打断 vbird1 原本的工作喔!所以,如果 vbird1 这个人不想要接受任何信息,直接下达这个动作:
[vbird1@www ~]$ mesg n
[vbird1@www ~]$ mesg
is n
|
不过,这个 mesg 的功能对 root 传送来的信息没有抵挡的能力!所以如果是 root 传送信息, vbird1 还是得要收下。
但是如果 root 的 mesg 是 n 的,那么 vbird1 写给 root 的信息会变这样:
[vbird1@www ~]$ write root
write: root has messages disabled
|
了解乎?如果想要解开的话,再次下达『 mesg y 』就好啦!想要知道目前的 mesg
状态,直接下达『 mesg 』即可!瞭呼?
相对于 write 是仅针对一个使用者来传『简讯』,我们还可以『对所有系统上面的用户传送简讯 (广播)』哩~
如何下达?用 wall 即可啊!他的语法也是很简单的喔!
[root@www ~]# wall "I will shutdown my linux server..."
|
然后你就会发现所有的人都会收到这个简讯呢!
使用者邮件信箱: mail
使用 wall, write 毕竟要等到使用者在在线才能够进行,有没有其他方式来联络啊?
不是说每个 Linux 主机上面的用户都具有一个 mailbox 吗?
我们可否寄信给使用者啊!呵呵!当然可以啊!我们可以寄、收 mailbox 内的信件呢!
一般来说, mailbox 都会放置在 /var/spool/mail 里面,一个账号一个 mailbox (文件)。
举例来说,我的 vbird1 就具有 /var/spool/mail/vbird1 这个 mailbox 喔!
那么我该如何寄出信件呢?就直接使用 mail 这个命令即可!这个命令的用法很简单的,直接这样下达:『
mail username@localhost -s "邮件标题" 』即可!
一般来说,如果是寄给本机上的使用者,基本上,连『 @localhost 』都不用写啦!
举例来说,我以 root 寄信给 vbird1 ,信件标题是『 nice to meet you 』,则:
[root@www ~]# mail vbird1 -s "nice to meet you"
Hello, D.M. Tsai
Nice to meet you in the network.
You are so nice. byebye!
. <==这里很重要喔,结束时,最后一行输入小数点 . 即可!
Cc: <==这里是所谓的『副本』,不需要寄给其他人,所以直接 [Enter]
[root@www ~]# <==出现提示字符,表示输入完毕了!
|
如此一来,你就已经寄出一封信给 vbird1 这位使用者啰,而且,该信件标题为:
nice to meet you,信件内容就如同上面提到的。不过,你或许会觉得 mail 这个程序不好用~
因为在信件编写的过程中,如果写错字而按下 Enter 进入次行,前一行的数据很难删除ㄟ!
那怎么办?没关系啦!我们使用数据流重导向啊!呵呵!利用那个小于的符号 ( < )
就可以达到取代键盘输入的要求了。也就是说,你可以先用 vi 将信件内容编好,
然后再以 mail vbird1 -s "nice to meet you" < filename 来将文件内容传输即可。
例题:
请将你的家目录下的环境变量文件 (~/.bashrc) 寄给自己!
答:
mail -s "bashrc file content" vbird < ~/.bashrc
|
刚刚上面提到的是关于『寄信』的问题,那么如果是要收信呢?呵呵!同样的使用 mail 啊!
假设我以 vbird1 的身份登陆主机,然后输入 mail 后,会得到什么?
[vbird1@www ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/vbird1": 1 message 1 new
>N 1 root@www.vbird.tsai Wed Mar 4 13:36 18/663 "nice to meet you"
& <==这里可以输入很多的命令,如果要查阅,输入 ? 即可!
|
在 mail 当中的提示字符是 & 符号喔,别搞错了~输入 mail 之后,我可以看到我有一封信件,
这封信件的前面那个 > 代表目前处理的信件,而在大于符号的左边那个 N 代表该封信件尚未读过,
如果我想要知道这个 mail 内部的命令有哪些,可以在 & 之后输入『 ? 』,就可以看到如下的画面:
& ?
Mail Commands
t <message list> type messages
n goto and type next message
e <message list> edit messages
f <message list> give head lines of messages
d <message list> delete messages
s <message list> file append messages to file
u <message list> undelete messages
R <message list> reply to message senders
r <message list> reply to message senders and all recipients
pre <message list> make messages go back to /usr/spool/mail
m <user list> mail to specific users
q quit, saving unresolved messages in mbox
x quit, do not remove system mailbox
h print out active message headers
! shell escape
cd [directory] chdir to directory or home if none given
|
<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 则会进行两项动作: 1. 将刚刚删除的信件移出
mailbox 之外; 2. 将刚刚有阅读过的信件存入 ~/mbox ,且移出 mailbox 之外。鸟哥通常不很喜欢使用 q 离开,
因为,很容易忘记读过什么咚咚~导致信件给他移出 mailbox 说~ |
由于读过的信件若使用『 q 』来离开 mail 时,会将该信件移动到 ~/mbox 中,所以你可以这样想象:
/var/spool/mail/vbird1 为 vbird1 的『新件匣』,而 /home/vbird1/mbox 则为『收件匣』的意思。
那如何读取 /home/vbird1/mbox 呢?就使用『mail -f /home/vbird1/mbox』即可。