文章目录
- Linux主机上的用户信息传递
- 查询用户:w、who、last、lastlog
- 用户对谈:write、mesg、wall
- 用户邮箱:mail
- 使用案例
- 给自己的QQ邮箱发送一封邮件
- ①获取授权码
- ②使用mailx发送邮件
- ③测试是否可以发送邮件
Linux主机上的用户信息传递
想过吗如何针对系统上面的用户进行查询呢?想像有几个状态,如过你在LInux上面操作时,刚好有其他用户也登录主机,你想要跟他交谈,该如何是好呢?你想要知道某个账号的相关信息,该如何查看呢?
查询用户:w、who、last、lastlog
现在如何知道目前已经登录在系统上面的用户有几个呢?可以通过w或who来查询
[root@localhost ~]# w
20:56:23 up 43 min, 4 users, load average: 0.12, 0.10, 0.06
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.100.1 20:12 7.00s 0.05s 0.00s w
root pts/1 192.168.100.1 20:12 43:27 4.77s 4.76s top
pro1 pts/2 192.168.100.1 20:26 30:20 0.01s 0.01s -bash
pro1 pts/3 192.168.100.1 20:26 30:20 3.37s 3.37s top
# 第一列:用户名:显示当前登录用户的用户名,通常是登录系统时所使用的用户名。
# 第二列:终端号:显示登录用户所使用的终端设备号,通常是tty或pts。
# 第三列:远程IP地址:如果是远程登录,则显示远程IP地址;如果是本地登录,则显示“:0”。
# 第四列:登录时间:显示登录时间,包括日期和具体时间。
# 第五列:IDLE:表示CPU空闲时间,即CPU没有在执行任何任务的时间。
# 第六列:JCPU:表示任务在CPU上运行的总时间,包括用户态和内核态。
# 第七列:PCPU:表示任务在CPU上使用的时间百分比,包括用户态和内核态。
# 第八列:运行的命令:如果登录用户正在运行命令,则会显示该命令的名称和参数。
这个例子中
第一行:当前时间是20.:56:23,系统已经运行了43分钟,目前有4个用户(user)登录到系统中,系统负载情况位0.12,0.10,0.06
第二行:各个选项的说明
第三行:用户root,终端pts/0,远程IP地址为192.168.100.1 ,登录时间为20:12,CPU空闲时间为7秒,任务在CPU上运行的总时间为0.05秒,任务在CPU上使用的时间百分比0.00秒,当前未运行任何命令。(后面的-bash,代表当前在运行一个bash shell进程。)
第四行:同第三行意思相同,自行带入数据
[root@localhost ~]# who
root pts/0 2023-04-14 20:12 (192.168.100.1)
root pts/1 2023-04-14 20:12 (192.168.100.1)
pro1 pts/2 2023-04-14 21:05 (192.168.100.1)
pro1 pts/3 2023-04-14 21:05 (192.168.100.1)
# 第一列:登录用户名:显示当前登录到系统中的用户名。
# 第二列:终端设备:显示当前用户登录所使用的终端设备,如tty1、pts/0等。
# 第三列:登录时间:显示当前用户登录系统的时间,格式为月日(mm-dd)和时分(hh:mm)。
# 第四列:远程IP地址:如果当前用户是通过网络登录到系统中的,who命令会显示远程IP地址。
另外,如果你想要知道每个账号最近登录的时间,则可以使用lastlog这个命令,lastlog
会去读取/var/log/lastlog
文件,并将数据输出如下
[root@localhost ~]# lastlog
用户名 端口 来自 最后登陆时间
root pts/1 192.168.100.1 五 4月 14 20:12:56 +0800 2023
bin **从未登录过**
daemon **从未登录过**
adm **从未登录过**
lp **从未登录过**
sync **从未登录过**
shutdown **从未登录过**
halt **从未登录过**
mail **从未登录过**
operator **从未登录过**
games **从未登录过**
ftp **从未登录过**
nobody **从未登录过**
systemd-network **从未登录过**
dbus **从未登录过**
polkitd **从未登录过**
sshd **从未登录过**
postfix **从未登录过**
chrony **从未登录过**
zhw pts/0 五 4月 14 20:21:16 +0800 2023
csq **从未登录过**
pro1 pts/3 192.168.100.1 五 4月 14 21:05:26 +0800 2023
pro2 pts/1 192.168.100.1 三 4月 12 17:37:18 +0800 2023
pro3 **从未登录过**
myuser1 pts/0 三 4月 12 14:28:54 +0800 2023
myuser2 **从未登录过**
myuser3 **从未登录过**
myuser4 pts/0 三 4月 12 20:40:49 +0800 2023
这样就能够知道每个账号最近登录时间
用户对谈:write、mesg、wall
那么我是否能够和系统上面的用户聊天呢?可以的,利用write这个命令,可以直接将信息传给接收者。
例如可以这样做,加入目前root和pro1俩人在线,我们使用root跟zhw讲话可以这样做:
write <使用者账号> [使用者所在终端界面]
[root@localhost ~]# who
root pts/0 2023-04-15 18:00 (192.168.100.1)
zhw pts/2 2023-04-15 18:02 (192.168.100.1)
[root@localhost ~]# write zhw pts/2
zhw
nihao <== 这两行是root写的信息
# 结束时,请按下ctrl + D 结束输入,此时在zhw用户的终端中就会显示
[zhw@localhost ~]$
Message from root@localhost.localdomain on pts/0 at 18:08 ...
zhw
nihao
EOF
立刻会有信息发给zhw,不过当时zhw正在编写文件或者查数据。你发消息就会立刻中断zhw原本的任务。所以,如果zhw这个用户不想要接受任何消息,直接执行这个操作
[zhw@localhost ~]$ mesg n
[zhw@localhost ~]$ mesg
is n
不过,这个mesg的功能对root传送来的信息没有阻止能力,所以如果是root传送信息,zhw还是得要收下。但是如果root的mesg是n的,那么zhw写给root的信息就会变成这样
[zhw@localhost ~]$ write root # 这里是zhw用户
write: you have write permission turned off
如果想要启用的话,再次执行【mesg y】就好。想要知道目前mesg状态,直接执行【mesg】即可。相对于write是仅针对一个用户来发送【短信】,我们还可以【对所有系统上面的用户发送短信(广播)】,使用wall即可,它的语法也是很简单的。
[root@localhost ~]# wall "i am root , hi everyone"
然后你就会发现所有人都会收到这个短信,连自己都能看到
用户邮箱:mail
使用wall、write毕竟要等到用户在线才能够进行,有没有其他方式来联络呢?我们可以用mailbox来给用户发送邮件,每个用户上面都有个mailbox,可以寄、收maillbox内的邮件。一般来说,mailbox都会放置在/var/spool/mail里面,一个账号一个mailbox(文件),举例来说,我的zhw用户就具有/var/spool/mail/zhw这个mailbox。
那么如何寄邮件呢?直接使用mail这个命令就行了。这个命令的用法很简单,直接执行【mail -s “邮件标题” username@localhost】即可。一般来说,如果寄给本机上面的用户,基本连【@localhost】都不用写。举例来说,我以root寄信给zhw用户,邮件标题是【hello,zhw nice to meet you】则:
# 如果没有mail这条命令就需要安装
[root@localhost ~]# yum install -y mailx
[root@localhost ~]# mail -s "hello,zhw nice to meet you" zhw # 安装完毕就可以使用这条命令了
ni hao zhw
nice to meet you
. # 这里很重要,结束时,最后一行输入小数点.就好了
EOT
[root@localhost ~]# # 退出到了命令行界面了
这样就已经寄出一封信给zhw这个用户了。或许你会觉得mail这个程序不好用,因为在邮件编写的过程中,如果写错字而按回车进入了下一行,前一行的数据很难删除,就很难办了。其实我们可以使用数据流重定向,利用 【<】就可以达到替换键盘输入的要求了,也就是是说可以先把信中的内容编好,如何再以mail -s “hello,zhw nice to meet you” zhw < filename 来传输文件内容即可
[root@localhost ~]# mail -s "hello,zhw nice to meet you" zhw < givezhwmail.txt
使用案例
将你的家目录下的环境变量文件(~/.bashrc)寄给自己
[zhw@localhost ~]$ mail -s ".bashrc file give root" root < ~/.bashrc
通过管道符命令直接将ls -al ~ 的内容传给root
[zhw@localhost ~]$ ls -al ~ | mail -s "my homefile give root" root
上面说到如何【发送邮件】,那么如何接收邮件呢?同样使用mail。假设我以zhw的身份登录主机,输入mail后会,会显示什么内容呢?
[zhw@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/zhw": 4 messages 4 new
>N 1 root Sat Apr 15 19:30 19/646 "hello,zhw nice to meet you"
& <==这里可以输入很多命令,如果要查看,输入?即可
输入mail之后,我们可以看到我有一封邮件,这封邮件的前面那个 > 代表目前处理的邮件,而在大与附后的右边那个N 代表该封哟见尚未度过。如果我想知道mail内部的命令有哪些,可以在 & 后面输入【?】就可以看到如下画面
& ?
mail commands
type <message list> type messages
next goto and type next message
from <message list> give head lines of messages
headers print out active message headers
delete <message list> delete messages
undelete <message list> undelete messages
save <message list> folder append messages to folder and mark as saved
copy <message list> folder append messages to folder without marking them
write <message list> file append message texts to file, save attachments
preserve <message list> keep incoming messages in mailbox even if saved
Reply <message list> reply to message senders
reply <message list> reply to message senders and all recipients
mail addresses mail to specific recipients
file folder change to another folder
quit quit and apply changes to folder
xit quit and discard changes made to folder
! shell escape
cd <directory> chdir to directory or home if none given
list list names of all available commands
指的是每封邮件的左边那个数字,而几个比较常见的命令是:
命令 | 意义 |
---|---|
h | 列出邮件标头,如果要查看40封邮件左右的邮件标头,可以输入【h 40】 |
d | 删除后续接的邮件号码,删除单封是【d10】,删除20~40封则【d20-40】。不过操作要生效的话,需要配合q命令才行(下面会说明) |
s | 将邮件储存为文件。例如我要将第一封邮件的内容存储为文件可以这样做:【s 1 ~/mail.file】 |
x | 输入x或者输入exit都可以,这个是【不做任何操作退出mail程序】的意思。不论你刚刚删除了什么邮件或读过什么,使用exit会直接退出mail,所以你做出的删除或者阅读工作都会无效。 |
q | 相对于exit是不操作退出,q则会实际进行你刚刚所执行的任何操作(尤其是删除) |
给自己的QQ邮箱发送一封邮件
此内容参考至CSDN滨河四季博主
①获取授权码
进入QQ邮箱点击设置
点击账户
往下滑找到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
开启服务
可能会弹出一个绑定手机号的先绑定手机号
绑定成功后会出现授权码
保存完毕关闭页面
②使用mailx发送邮件
- 安装mailx
yum install -y mailx
- 编辑mailx配置文件
[root@localhost ~]# vi /etc/mail.rc
在文件末尾添加以下配置项:
set from=123@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=123@qq.com
set smtp-auth-password=[这里填授权码]
set smtp-auth=login
解释
-
set from=123@qq.com:
set from是用于设置邮件的发件人地址。在这里,123@qq.com是邮件的发件人地址。 -
set smtp=smtp.qq.com:
set smtp是用于设置SMTP服务器的地址。在这里,smtp.qq.com是QQ邮箱的SMTP服务器地址。 -
set smtp-auth-user=123@qq.com:
set smtp-auth-user是用于设置SMTP服务器需要验证的用户名。在这里,123@qq.com是QQ邮箱的用户名。 -
set smtp-auth-password=
[这里填的是授权码]
:
set smtp-auth-password是用于设置SMTP服务器需要验证的密码。 -
set smtp-auth=login:
set smtp-auth是用于设置SMTP服务器使用的身份验证方式。在这里,使用登录认证的方式进行身份验证,即Auth Login。SMTP服务器会要求客户端提供用户名和密码,然后验证这些凭据是否正确。如果验证成功,就允许客户端发送邮件;否则,就拒绝客户端的请求。使用登录认证的方式进行身份验证,可以使SMTP服务器在传输过程中对身份信息进行加密,提高了安全性。
③测试是否可以发送邮件
# -v 是显示发送过程,发送过程中出错可以看到
[root@localhost ~]# mail -v -s "邮件主题" 123@qq.com < mailfile.txt
Resolving host smtp.qq.com . . . done.
Connecting to 109.244.198.105:smtp . . . connected.
220 newxmesmtplogicsvrsza12-0.qq.com XMail Esmtp QQ Mail Server.
>>> EHLO localhost
250-newxmesmtplogicsvrsza12-0.qq.com
250-PIPELINING
250-SIZE 73400320
250-STARTTLS
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
>>> AUTH LOGIN
334 VXNlcm5hbWU6
>>> MjAzMzcxNzYxN0BxcS5jb20=
334 UGFzc3dvcmQ6
>>> a2NwdnV6eGZueXZtaGJoYw==
235 Authentication successful
>>> MAIL FROM:<123@qq.com>
250 OK
>>> RCPT TO:<123@qq.com>
250 OK
>>> DATA
354 End data with <CR><LF>.<CR><LF>.
>>> .
250 OK: queued as.
>>> QUIT
221 Bye.
发送成功了