Linux shell编程学习笔记50:who命令

0 前言

2024年的网络安全检查又开始了,对于使用基于Linux的国产电脑,我们可以编写一个脚本来收集系统的有关信息。比如,我们可以使用who命令来收集当前已登陆系统的用户信息,当前运行级别等信息。

1. who命令 的功能、格式和选项说明

我们可以使用命令 who --help 来查看who命令的帮助信息。

purpleendurer @ bash \~\] ++who --help++ Usage: who \[OPTION\]... \[ FILE \| ARG1 ARG2

Print information about users who are currently logged in.

-a, --all same as -b -d --login -p -r -t -T -u

-b, --boot time of last system boot

-d, --dead print dead processes

-H, --heading print line of column headings

-l, --login print system login processes

--lookup attempt to canonicalize hostnames via DNS

-m only hostname and user associated with stdin

-p, --process print active processes spawned by init

-q, --count all login names and number of users logged on

-r, --runlevel print current runlevel

-s, --short print only name, line, and time (default)

-t, --time print last system clock change

-T, -w, --mesg add user's message status as +, - or ?

-u, --users list users logged in

--message same as -T

--writable same as -T

--help display this help and exit

--version output version information and exit

If FILE is not specified, use /var/run/utmp. /var/log/wtmp as FILE is common.

If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/\>

Report who translation bugs to <http://translationproject.org/team/\>

For complete documentation, run: info coreutils 'who invocation'

1.1 who命令的功能

显示当前已登录的用户信息。

1.2 who命令的格式

who [选项]... [ 文件 | 参数1 参数2 ]

1.3 who命令的选项说明
选项 描述
-a --all 等于-b -d --login -p -r -t -T -u 选项的组合
-b --boot 上次系统启动时间
-d --dead 显示已死的进程
-H --heading 输出头部的标题列
--ips 打印 IP 而不是主机名。使用 --lookup,根据存储的 IP(如果可用)进行规范化,而不是存储的主机名
-l --login 显示系统登录进程
--lookup 尝试通过 DNS 查验主机名
-m 只显示和标准输入有直接交互的主机和用户
-p --process 显示由 init 进程衍生的活动进程
-q --count 列出所有已登录用户的登录名与用户数量
-r --runlevel 显示当前的运行级别
-s --short 只显示名称、线路和时间(默认)
-t --time 打印上次系统时钟更改
-T -w --mesg 用+,- 或 ? 标注用户消息状态
-u --users 列出已登录的用户
--message 等于-T
--writable 等于-T
--help 显示此帮助信息并退出
--version 显示版本信息并退出

如果未指定 文件,请使用 /var/run/utmp。 /var/log/wtmp 作为 文件 很常见。

如果给出 参数1 参数2,则 -m 假定:"am i"或"mom likes"是常见的。

2 who命令使用实例

2.1 who -b 显示上次系统启动时间。

purpleendurer @ bash \~\] ++who -b++ 系统引导 2024-05-27 17:33 \[purpleendurer @ bash \~

2.2 who -l:显示系统登录进程

purpleendurer @ bash \~\] ++who -l++ 登录 ttyAMA0 2024-05-27 09:33 1710 id=AMA0 登录 tty1 2024-05-27 09:33 1708 id=tty1

命令返回了6列信息,分别是什么含义呢?我们可以使用-H 选项来了解。

2.3 who -H -l:显示标题行及系统登录进程

purpleendurer @ bash \~\] ++who -l -H++ 名称 线路 时间 空闲 进程号 备注 登录 ttyAMA0 2024-05-27 09:33 1710 id=AMA0 登录 tty1 2024-05-27 09:33 1708 id=tty1

这下我们知道每列信息的含义了吧?

2.4 who -H -m:只显示标题行及和标准输入有直接交互的主机和用户

purpleendurer @ bash \~\] ++who -m -H++ 名称 线路 时间 备注 gxxc pts/0 2024-05-27 23:02 (:0) \[purpleendurer @ bash \~

2.5 who -q:只显示标题行及和标准输入有直接交互的主机和用户

purpleendurer @ bash \~\] ++who -q++ root purpleendurer # 用户数=2

2.6 who -r:显示当前的运行级别

purpleendurer @ bash \~\] ++who -r++ 运行级别 5 2024-05-27 09:33 \[purpleendurer @ bash \~

说明:在传统的Linux系统中,运行级别可以分为以下几类:

  1. 0级:关机 - 所有进程都将被终止,系统被关闭。
  2. 1级:单用户模式 - 仅允许一个用户登录系统,通常用于系统维护或恢复。
  3. 2级:多用户模式,不带NFS - 多个用户可以登录系统,但网络文件系统(NFS)不可用。
  4. 3级:多用户模式,文本模式 - 这是一个完全的多用户模式,支持网络功能,但通常只提供命令行界面,没有图形界面。
  5. 4级:未定义 - 在某些系统中,这个级别可能用于定义自定义的运行模式。
  6. 5级:多用户模式,图形界面 - 类似于级别3,但提供了图形用户界面(GUI),允许用户使用图形界面登录和操作系统。
  7. 6级:重启 - 系统将重新启动。

2.7 who -w -H:用+,- 或 ? 标注用户消息状态

purpleendurer @ bash \~\] ++who -w -H++ 名称 线路 时间 备注 boot + tty7 2024-05-27 09:33 (:0) purpleendurer + pts/0 2024-05-27 23:02 (:0) \[purpleendurer @ bash \~

2.8 who am i -H:显示当前用户信息

purpleendurer @ bash \~\] who am i -H 名称 线路 时间 备注 purpleendurer pts/0 2024-05-27 23:02 (:0) \[purpleendurer @ bash \~

2.9 who -u -H:列出已登录的用户

purpleendurer @ bash \~\] ++who -u -H++ 名称 线路 时间 空闲 进程号 备注 root tty7 2024-05-27 09:33 old 2428 (:0) purpleendurer pts/0 2024-05-27 23:02 . 30989 (:0) \[purpleendurer @ bash \~

其中第4列是闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串。

2.10 显示所有信息

purpleendurer @ bash \~\] ++who -a -H++ 名称 线路 时间 空闲 进程号 备注 退出 系统引导 2024-05-27 17:33 登录 ttyAMA0 2024-05-27 09:33 1710 id=AMA0 登录 tty1 2024-05-27 09:33 1708 id=tty1 运行级别 5 2024-05-27 09:33 root tty7 2024-05-27 09:33 old 2428 (:0) purpleendurer pts/0 2024-05-27 23:02 . 30989 (:0) \[purpleendurer @ bash \~

相关推荐
我们的五年13 分钟前
【Linux系统】进程间通信-System V消息队列
linux·运维·服务器·c++
island131422 分钟前
【Linux网络#18】:深入理解select多路转接:传统I/O复用的基石
linux·运维·数据库
网络抓包与爬虫1 小时前
flutter WEB端启动优化(加载速度,加载动画)
websocket·网络协议·tcp/ip·http·网络安全·https·udp
网络抓包与爬虫1 小时前
从头开发一个Flutter插件(二)高德地图定位插件
websocket·网络协议·tcp/ip·http·网络安全·https·udp
色的归属感2 小时前
一款功能强大的手机使用情况监控工具
websocket·网络协议·tcp/ip·http·网络安全·https·udp
iOS技术狂热者2 小时前
【Android开发基础】手机传感器信息的获取
websocket·网络协议·tcp/ip·http·网络安全·https·udp
it技术分享just_free2 小时前
软考教材重点内容 信息安全工程师 第21章 网络设备安全
web安全·网络安全·信息安全·系统安全·软考
TDD_06289 小时前
【运维】Centos硬盘满导致开机时处于加载状态无法开机解决办法
linux·运维·经验分享·centos
x66ccff9 小时前
vLLM 启动 GGUF 模型踩坑记:从报错到 100% GPU 占用的原因解析
linux
swift开发pk OC开发10 小时前
如何轻松查看安卓手机内存,让手机更流畅
websocket·网络协议·tcp/ip·http·网络安全·https·udp