00. 目录
01. 命令概述
last命令用于显示用户最近登录信息。单独执行last命令,它会读取/var/log/wtmp
的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。
last命令的作用是显示近期用户或终端的登录情况,通过查看系统记录的日志文件内容,进而使管理员可以获知谁曾经或者企图连接系统。
执行last命令时,它会读取/var/log目录下名称为wtmp的文件,并把该文件记录的登录系统或终端的用户名单全部显示出来。默认显示wtmp的记录,btmp能显示的更详细,可以显示远程登录,例如ssh登录。
02. 命令格式
last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...]
- 1
03. 常用选项
-a:把从何处登入系统的主机名称或ip地址,显示在最后一行;
-d:将IP地址转换成主机名称;
-f <记录文件>:指定记录文件。
-n <显示列数>或-<显示列数>:设置列出名单的显示列数;
-R:不显示登入系统的主机名称或IP地址;
-x:显示系统关机,重新开机,以及执行等级的改变等信息。
- 1
- 2
- 3
- 4
- 5
- 6
04. 参考示例
4.1 显示近期用户或终端的登录情况
[deng@itcast ~]$ last
deng pts/2 172.16.0.51 Fri Aug 2 21:54 still logged in
- 1
- 2
第一列: 用户名
第二列: 终端位置
pts: 意味着从SSH或TELNET的远程连接用户
tty: 意味着直接连接到计算机或者本地连接用户
除了重启,所有状态会在启动时显示
第三列: 登录IP或者内核
0.0或者什么都没有的话:意味着用户通过本地终端连接
重启活动,会显示内核版本
第四列: 开始时间
第五列: 结束时间
still log in: 还在登录
down: 直到正常关机
crash: 直到强制关机
第六列: 持续时间
4.2 简略显示,并指定显示的个数
[deng@itcast ~]$ last -n 5 -R
deng pts/2 Fri Aug 2 21:54 still logged in
deng pts/1 Fri Aug 2 21:49 still logged in
deng pts/2 Fri Aug 2 20:30 - 21:04 (00:34)
deng pts/1 Fri Aug 2 20:11 - 21:04 (00:52)
deng pts/1 Thu Aug 1 22:14 - 19:51 (21:37)
wtmp begins Thu Nov 8 03:53:52 2018
[deng@itcast ~]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
4.3 显示最后一列显示主机IP地址
[deng@itcast ~]$ last -n 5 -a -i
deng pts/2 Fri Aug 2 21:54 still logged in 172.16.0.51
deng pts/1 Fri Aug 2 21:49 still logged in 172.16.0.51
deng pts/2 Fri Aug 2 20:30 - 21:04 (00:34) 192.168.12.194
deng pts/1 Fri Aug 2 20:11 - 21:04 (00:52) 192.168.12.194
deng pts/1 Thu Aug 1 22:14 - 19:51 (21:37) 172.16.0.51
wtmp begins Thu Nov 8 03:53:52 2018
[deng@itcast ~]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
4.4 显示最近6条登录记录
[deng@itcast ~]$ last -6
deng pts/2 172.16.0.51 Fri Aug 2 21:54 still logged in
deng pts/1 172.16.0.51 Fri Aug 2 21:49 still logged in
deng pts/2 192.168.12.194 Fri Aug 2 20:30 - 21:04 (00:34)
deng pts/1 192.168.12.194 Fri Aug 2 20:11 - 21:04 (00:52)
deng pts/1 172.16.0.51 Thu Aug 1 22:14 - 19:51 (21:37)
deng pts/1 192.168.12.178 Thu Aug 1 21:26 - 21:54 (00:27)
wtmp begins Thu Nov 8 03:53:52 2018
[deng@itcast ~]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
4.5 显示最近15条记录
[deng@itcast ~]$ last -n 15
deng pts/2 172.16.0.51 Fri Aug 2 21:54 still logged in
deng pts/1 172.16.0.51 Fri Aug 2 21:49 still logged in
deng pts/2 192.168.12.194 Fri Aug 2 20:30 - 21:04 (00:34)
deng pts/1 192.168.12.194 Fri Aug 2 20:11 - 21:04 (00:52)
deng pts/1 172.16.0.51 Thu Aug 1 22:14 - 19:51 (21:37)
deng pts/1 192.168.12.178 Thu Aug 1 21:26 - 21:54 (00:27)
deng pts/3 192.168.12.178 Thu Aug 1 18:30 - 21:26 (02:56)
deng pts/2 172.16.0.51 Wed Jul 31 21:54 - 18:32 (20:38)
deng pts/1 172.16.0.51 Wed Jul 31 21:54 - 18:32 (20:38)
deng pts/1 192.168.12.161 Wed Jul 31 21:27 - 21:47 (00:20)
deng pts/1 192.168.12.161 Wed Jul 31 21:25 - 21:27 (00:02)
deng pts/1 192.168.12.161 Wed Jul 31 20:18 - 21:24 (01:05)
deng pts/2 192.168.12.161 Wed Jul 31 20:01 - 21:47 (01:45)
deng pts/1 172.16.0.51 Tue Jul 30 20:14 - 20:05 (23:50)
deng pts/1 172.16.0.51 Tue Jul 30 15:05 - 19:49 (04:44)
wtmp begins Thu Nov 8 03:53:52 2018
[deng@itcast ~]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
4.6 显示最近root用户的5条记录
[deng@itcast ~]$ last -n 5 root
root pts/5 192.168.21.60 Sun Mar 24 21:17 - 21:18 (00:00)
root pts/1 192.168.21.21 Wed Mar 6 09:35 - 09:36 (00:00)
root pts/3 192.168.199.151 Fri Dec 28 23:23 - down (00:43)
root pts/2 :0 Fri Dec 28 21:34 - 00:07 (02:32)
root pts/1 :0 Fri Dec 28 21:34 - 00:07 (02:33)
wtmp begins Thu Nov 8 03:53:52 2018
[deng@itcast ~]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
4.7 指定记录文件
该文件比较详细,可以显示ssh远程登录的信息
[root@itcast ~]# last -n 8 -f /var/log/btmp
root pts/1 Fri Aug 2 21:00 gone - no logout
root pts/1 Thu Aug 1 21:27 - 21:00 (23:33)
btmp begins Thu Aug 1 21:27:11 2019
[root@itcast ~]#
- 1
- 2
- 3
- 4
- 5
- 6
4.8 显示完整登录和登出信息
[deng@itcast ~]$ last -F
- 1
4.9 关于last几点说明
关于last命令的几点说明:
-
wtmp,btmp,utmp均为二进制文件,不能用cat查看,可用last打开
-
echo > /var/log/wtmp 可清空wtmp记录
Linux系统的三个主要日志子系统
进程日志(acct/pacct: 记录用户命令)
错误日志(/var/log/messages:系统级信息;access-log:记录HTTP/WEB的信息)
连接日志(/var/log/wtmp,/var/log/btmp,/var/run/utmp)
关当前登录用户的信息记录在文件utmp中;
登录进入和退出纪录在文件wtmp中;
最后一次登录文件可以用lastlog命令察看;
数据交换、关机和重起也记录在wtmp文件中;
05. 总结
06. 附录
队列(Queue
)是一种常用于任务间通信的数据结构。任务能够从队列里面读取消息,当队列中的消息为空时,挂起读取任务;当队列中有新消息时,挂起的读取任务被唤醒并处理新消息。任务也能够往队列里写入消息,当队列已经写满消息时,挂起写入任务;当队列中有空闲消息节点时,挂起的写入任务被唤醒并写入消息。如果将读队列和写队列的超时时间设置为0,则不会挂起任务,接口会直接返回,这就是非阻塞模式。消息队列提供了异步处理机制,允许将一个消息放入队列,但不立即处理。同时队列还有缓冲消息的作用。
本文通过分析鸿蒙轻内核队列模块的源码,掌握队列使用上的差异。本文中所涉及的源码,以OpenHarmony LiteOS-M
内核为例,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取。
接下来,我们看下队列的结构体,队列初始化,队列常用操作的源代码。
1、队列结构体定义和常用宏定义
1.1 队列结构体定义
在文件kernel\include\los_queue.h
中定义队列控制块结构体为LosQueueCB
,结构体源代码如下。队列状态.queueState
取值OS_QUEUE_UNUSED
、OS_QUEUE_INUSED
,其他结构体成员见注释部分。
typedef struct {
UINT8 *queue; /**< 队列内存空间的指针 */
UINT16 queueState; /**< 队列的使用状态 */
UINT16 queueLen; /**< 队列长度,即消息数量 */
UINT16 queueSize; /**< 消息节点大小 */
UINT16 queueID; /**< 队列编号 */
UINT16 queueHead; /**< 消息头节点位置 */
UINT16 queueTail; /**< 消息尾节点位置 */
UINT16 readWriteableCnt[OS_READWRITE_LEN]; /**< 2维数组,可读、可写的消息数量, 0:可读, 1:可写 */
LOS_DL_LIST readWriteList[OS_READWRITE_LEN]; /**< 2维双向链表数组,阻塞读、写任务的双向链表, 0:读链表, 1:写链表 */
LOS_DL_LIST memList; /**< 内存节点双向链表 */
} LosQueueCB;
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: