`

第十四章 Linux 主机上的用户信息传递

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

查询使用者: w, who, last, lastlog

如何查询一个用户的相关数据呢?这还不简单,我们之前就提过了 id, finger 等命令了,都可以让您了解到一个用户的相关信息啦!那么想要知道使用者到底啥时候登陆呢? 最简单可以使用 last 检查啊!这个玩意儿我们也在 第十一章 bash 提过了, 您可以自行前往参考啊!简单的很。

那如果你想要知道目前已登陆在系统上面的用户呢?可以透过 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』即可。

转自:http://vbird.dic.ksu.edu.tw/linux_basic/0410accountmanager_6.php
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Linux面试宝典大全+答案

    #### 十四、系统交换分区的功能 - 用作虚拟内存,扩展物理内存容量。 #### 十五、内核的组成部分 - **进程管理**:负责进程的调度和管理。 - **文件管理**:处理文件的创建、打开、关闭等操作。 - **I/O管理**:...

    Linux程序设计 第4版.haozip01

    第14章 信号量、共享内存和消息队列 488 14.1 信号量 488 14.1.1 信号量的定义 489 14.1.2 一个理论性的例子 489 14.1.3 linux的信号量机制 490 14.1.4 使用信号量 492 14.2 共享内存 496 14.2.1 shmget函数 ...

    Linux程序设计 第4版.haozip02

    第14章 信号量、共享内存和消息队列 488 14.1 信号量 488 14.1.1 信号量的定义 489 14.1.2 一个理论性的例子 489 14.1.3 linux的信号量机制 490 14.1.4 使用信号量 492 14.2 共享内存 496 14.2.1 shmget函数 ...

    redhat linux基础试题

    - **多用户系统**:RedHat Linux支持多用户同时登录系统,并且每个用户都有自己的工作环境。 - **广泛的硬件支持**:RedHat Linux能够运行在多种硬件平台上,包括x86、ARM等架构。 - **开放性**:RedHat Linux基于...

    Linux高性能服务器编程

    13.6.5 共享内存实例 13.7 消息队列 13.7.1 msgget系统调用 13.7.2 msgsnd系统调用 13.7.3 msgrcv系统调用 13.7.4 msgctl系统调用 13.8 IPC命令 13.9 在进程间传递文件描述符 第14章 多线程编程 14.1 ...

    西南大学Linux期末考试试题和答案

    Linux系统Primary Slave IDE接口的硬盘上第2个逻辑分区的设备标识是:** - **答案:D) hdb6** - **解析:** 在早期的Linux系统中,IDE硬盘被命名为`hda`和`hdb`,其中`hda`是主硬盘,`hdb`是从硬盘。每个硬盘最多...

    最新linux笔试题

    - **知识点:** `netconfig` 是一个用于配置Linux系统网络参数的工具,它可以帮助用户设置主机名、域名、域名服务器、IP地址等网络相关信息。 **18. 用户标识:** - **知识点:** 在Linux系统中,每个用户都有一个...

    Linux常见面试题及答案

    在安装Linux系统中,使用netconfig程序对网络进行配置,该安装程序会一步步提示用户输入主机名、域名、域名服务器、IP地址、网关地址和子网掩码等必要信息。 **知识点**:`netconfig` 是一个交互式的网络配置工具...

    基于netbios发现内网存活主机(第十九课).docx

    标题中的“基于NetBIOS发现内网存活主机”是指通过NetBIOS协议来探测局域网内部哪些设备是活跃的,这一技术对于网络安全管理和故障排查非常有用。NetBIOS(Network Basic Input/Output System)是一种早期的局域网...

    Linux命令详解讲义

    ### Linux命令详解讲义 #### 一、CentOS基本使用 **CentOS**是一种基于**Red Hat Enterprise Linux**(RHEL)源代码重新编译而成的开源操作系统,它旨在提供与RHEL高度兼容且免费的企业级Linux平台。对于初学者来...

    网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

     第十四章 原始套接字编程实践  14.1 原始套接字  14.1.1 原始套接字的创建  14.1.2 原始套接字的使用  14.1.3 IP包头和ICMP报文的C语言描述  14.2 Ping应用程序  14.2.1 程序设计  ...

    Linux内核编译配置选项简介

    该选项在某些文件系统上提供了从内核空间向用户空间传递大量数据的接口,比如debugfs。 17. initramfs源文件(Initramfs source file(s)) initramfs(初始内存文件系统)已经被initramfs取代。initramfs作为内核...

    嵌入式linux学习笔记

    由于嵌入式设备的硬件平台通常与开发主机不同,需要在宿主机上构建交叉编译工具链,使能在目标平台上运行的代码在宿主机上编译。这包括选择合适的GCC编译器、构建工具(如make)和库文件等。 四、Bootloader ...

    linux网络编程学习笔记

    netstat 命令 netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的 选项 我们常用的选项是 -an 用来显示详细的网络...的服务 我们可以调用第四个函数,相反为了得到端口号可以调用第三个函数.

Global site tag (gtag.js) - Google Analytics