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 exitIf 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系统中,运行级别可以分为以下几类:
- 0级:关机 - 所有进程都将被终止,系统被关闭。
- 1级:单用户模式 - 仅允许一个用户登录系统,通常用于系统维护或恢复。
- 2级:多用户模式,不带NFS - 多个用户可以登录系统,但网络文件系统(NFS)不可用。
- 3级:多用户模式,文本模式 - 这是一个完全的多用户模式,支持网络功能,但通常只提供命令行界面,没有图形界面。
- 4级:未定义 - 在某些系统中,这个级别可能用于定义自定义的运行模式。
- 5级:多用户模式,图形界面 - 类似于级别3,但提供了图形用户界面(GUI),允许用户使用图形界面登录和操作系统。
- 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 ~]
相关文章:
Linux shell编程学习笔记50:who命令
0 前言 2024年的网络安全检查又开始了,对于使用基于Linux的国产电脑,我们可以编写一个脚本来收集系统的有关信息。比如,我们可以使用who命令来收集当前已登陆系统的用户信息,当前运行级别等信息。 1. who命令 的功能、格式和选项…...
vue使用webscoket
1. 创建 WebSocket 连接 首先,你需要在你的 Vue 组件中创建一个 WebSocket 连接。通常,这会在组件的 created 或 mounted 生命周期钩子中完成。 created() {this.socket new WebSocket(wss://your-websocket-url);this.socket.onopen () > {conso…...
第18章-综合以上功能 基于stm32的智能小车(远程控制、避障、循迹) 基于stm32f103c8t6/HAL库/CubeMX/超详细,包含代码讲解和原理图
这个是全网最详细的STM32项目教学视频。 第一篇在这里: 视频在这里 STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 第18章-综合以上功能 18-按键和app按钮切换功能 根据上面介绍,我们的模式可…...
java并发工具类都有哪些
Java中的并发工具类包括: CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成某些操作。它通常用于线程间的同步,例如在一个线程完成其工作后通知其他线程继续执行。 CyclicBarrier CyclicBarrier是一个同步辅助类,它允许一…...
偏微分方程算法之抛物型方程差分格式编程示例一
目录 一、研究问题 二、C++代码 三、结果分析 一、研究问题 从本节开始将对具体的抛物型偏微分问题算例进行C++编程,以加深对抛物型偏微分方程差分格式构造的理解和应用。 采用向前欧拉格式计算抛物型方程初边值问题:...
数据结构—栈(C语言实现)
文章目录 前言一、栈的概念二、栈的代码实现Stack.hStack.c 三、使用栈解决有效的括号问题总结 前言 小伙伴们,大家好哇!!欢迎来到我的博客! 今天来分享一下另外一种数据结构—栈。主要包括栈的基本概念与其代码实现,…...
JVM学习-垃圾回收器(一)
垃圾回收器 按线程数分类 串行垃圾回收器 串行回收是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束 在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表…...
dolphinscheduler standalone安装
官方文档:https://dolphinscheduler.apache.org/en-us/docs/3.1.3/guide/installation/standalone 1.安装(以放在/home为例) 下载见:https://download.csdn.net/download/taotao_guiwang/89311365 tar -xvzf apache-dolphinsche…...
力扣hot 100:49. 字母异位词分组(python C++)
目录 题目描述:题解(python):(方法一:排序)代码解析代码运行解析 题解(C):(方法一:排序)代码解析&运行解析 原题目链接…...
男士内裤什么材质的好?推荐男士内裤的注意事项
天气已经逐渐热了起来,广大男士们在夏天难免会出一身的汗,不少男士朋友都觉得一些吸湿性、透气性不好的内裤会在夏天穿着很不适,想挑选一些比较适合夏天的男士内裤,但现在的男士内裤品牌和材质分类却比较多,看得大家眼…...
Python操作MySQL数据库的工具--sqlalchemy
文章目录 一、pymysql和sqlalchemy的区别二、sqlalchemy的详细使用1.安装库2.核心思想3.整体思路4.sqlalchemy需要连接数据库5.使用步骤1.手动提前创建数据库2.使用代码创建数据表3.用代码操作数据表3.1 增加数据3.2 查询数据3.3 删除数据3.4 修改数据 一、pymysql和sqlalchemy…...
【算法】排序
排序算法在信息学非常常用。Hello!大家好,我是学霸小羊,今天讲几个排序算法。 1.“打擂台”排序 思路:a[ i ]和a[ j ]打擂台(i<j)。 这个方法简单易懂,只需要看看需不需要交换。按从大到小…...
前端开发之xlsx的使用和实例,并导出多个sheet
前端开发之xlsx的使用和实例 前言效果图1、安装2、在页面中引用3、封装工具类(excel.js)4、在vue中使用 前言 在实现业务功能中导出是必不可少的功能,接下来为大家演示在导出xlsx的时候的操作 效果图 1、安装 npm install xlsx -S npm inst…...
创建数据库数据插入、更新与删除
创建数据库和创建表 一、实验目的 (1)熟悉和掌握数据库的创建和连接方法; (2)熟悉和掌握数据库表的建立、修改和删除; (3)加深对表的实体完整性、参照完整性和用户自定义完整性的…...
【CTF Web】CTFShow web3 Writeup(SQL注入+PHP+UNION注入)
web3 1 管理员被狠狠的教育了,所以决定好好修复一番。这次没问题了。 解法 注意到: <!-- flag in id 1000 -->但是拦截很多种字符。 if(preg_match("/or|\-|\\|\*|\<|\>|\!|x|hex|\/i",$id)){die("id error"); }使用…...
常见API(JDK7时间、JDK8时间、包装类、综合练习)
一、JDK7时间——Date 1、事件相关知识点 2、Date时间类 Data类是一个JDK写好的Javabean类,用来描述时间,精确到毫秒。 利用空参构造创建的对象,默认表示系统当前时间。 利用有参构造创建的对象,表示指定的时间。 练习——时间计…...
Docker数据卷(volume)
数据卷 数据卷是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。(容器内目录与宿主机目录对应的桥梁,修改宿主机对应的目录,docker会映射到容器内部,相当于修改了容器内的,反之也一样)数…...
30.哀家要长脑子了!---栈与队列
1.388. 文件的最长绝对路径 - 力扣(LeetCode) 其实看懂了就还好 用一个栈来保存所遍历过最大的文件的绝对路径的长度,栈顶元素是文件的长度,栈中元素的个数是该文件目录的深度,非栈顶元素就是当时目录的长度 检查此…...
多重继承引起的二义性问题和虚基类
多重继承容易引起的问题就是因为继承的成员同名而产生的二义性问题。 例:类A和类B中都有成员函数display和数据成员a,类C是类A和类B的直接派生类 情况一: class A {public:int a;void display(); }; class B {public:int a;void display; }; class C:…...
ciscn
ciscn Crypto部分复现 古典密码 先是埃特巴什密码(这个需要进行多次测试),然后base64,再栅栏即可 答案:flag{b2bb0873-8cae-4977-a6de-0e298f0744c3} _hash 题目: #!/usr/bin/python2 # Python 2.7 (6…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
