首页 > 运维 > linux运维 > 正文

Linux查看当前登录用户的命令

P粉602998670
发布: 2025-09-05 08:08:01
原创
838人浏览过
whoami显示当前会话用户,who和w查看所有在线用户及活动,users仅列出在线用户名;适用于身份确认、系统监控与脚本处理。

linux查看当前登录用户的命令

在Linux系统中,想要查看当前登录的用户,有几个非常直接且常用的命令可以帮助你。最常见且最能满足大部分需求的,无疑是

whoami
登录后复制
who
登录后复制
这两个。它们各自有侧重,但都能清晰地告诉你,谁正在操作这台机器,或者说,谁目前在线。

当我们谈论查看当前登录用户,其实背后有两种常见的场景需求:一是“我是谁?”,二是“谁在线?”。针对这两种情况,Linux提供了非常精炼的工具

如果你只是想知道当前你这个终端会话是以哪个用户身份运行的,最直接的命令就是

whoami
登录后复制
。它会简单粗暴地返回你的用户名,比如
user1
登录后复制
。这个命令的妙处在于它的简洁,尤其是在你通过
sudo
登录后复制
切换了用户,或者在一些脚本里需要确认当前执行身份时,它能给你一个明确的答案。我个人在处理一些权限敏感的脚本时,经常会用
whoami
登录后复制
来做前置判断,确保脚本在正确的用户上下文下运行,避免一些不必要的权限问题。

而如果你想了解当前系统上有哪些用户登录了,以及他们是从哪里登录的,

who
登录后复制
命令就派上用场了。
who
登录后复制
会列出所有当前登录的用户,包括他们的用户名、终端(tty)、登录时间,甚至是远程登录的IP地址。这对于系统管理员来说,是个非常实用的功能,可以快速概览系统的活动状态。举个例子,我在排查系统资源占用高的问题时,会先用
who
登录后复制
看看有没有异常登录,或者某个用户开了太多会话。

此外,

w
登录后复制
命令也是一个强大的工具,它不仅显示谁在线,还会显示这些用户当前正在做什么。这比
who
登录后复制
提供了更多的上下文信息,比如用户的空闲时间、JCPU、PCPU以及正在执行的命令。对我来说,
w
登录后复制
更像是一个“用户活动监控器”,当我想知道某个用户是不是在跑什么耗资源的进程时,
w
登录后复制
是我的首选。它给出的信息更丰富,能让我对当前系统上的用户行为有一个更全面的了解。

如何区分当前会话用户与系统所有在线用户?

这是一个很常见的混淆点,尤其对于初学者来说。我的经验是,理解它们的核心差异在于“视角”。

whoami
登录后复制
的视角是“我”,它只关心你当前正在操作的这个shell会话是以哪个用户身份运行的。这对于你个人来说是最直接的反馈,比如你登录了系统,然后通过
su - otheruser
登录后复制
切换了用户,
whoami
登录后复制
就会告诉你现在是
otheruser
登录后复制
。它的输出通常就一行,一个用户名,非常纯粹。

who
登录后复制
w
登录后复制
的视角则是“系统”,它们关心的是整个系统层面上有哪些用户是“活跃”的,即已经成功登录并拥有一个终端会话的用户。这意味着,即使你只登录了一个用户,但如果你通过SSH从多个终端连接到服务器,或者在图形界面下打开了多个终端窗口,
who
登录后复制
都会把这些不同的会话都列出来。
w
登录后复制
命令更进一步,它还会告诉你这些用户在做什么,比如他们正在运行的命令。

所以,如果你只是想确认自己的身份,用

whoami
登录后复制
。如果你是系统管理员,想鸟瞰整个系统的用户活动,那么
who
登录后复制
w
登录后复制
才是你的利器。它们提供了更广阔的视角,让你能看到所有已登录的用户及其会话信息,甚至可以帮助你发现一些潜在的异常登录或者长时间空闲的会话。

who
登录后复制
w
登录后复制
users
登录后复制
命令的具体输出有什么不同,以及它们各自的适用场景?

这几个命令虽然都与查看用户有关,但它们的输出细节和侧重点大相径庭,理解这些差异能帮助我们更高效地选择工具。

users
登录后复制
命令是最简洁的,它仅仅列出当前登录到系统上的所有用户的用户名,每个用户名只出现一次,即使同一个用户登录了多次。例如,如果
user1
登录后复制
登录了两次,
users
登录后复制
只会输出
user1
登录后复制
。它的适用场景就是,你只想知道“谁在线了?”,而不关心他们从哪里登录,或者在做什么。这在一些需要快速统计活跃用户数量的脚本中非常有用。

who
登录后复制
命令则提供了更详细的会话信息。它的输出通常包含:用户名、终端线路(tty)、登录时间,以及如果是远程登录,还会显示远程主机名或IP地址。比如:

user1    pts/0        2023-10-27 10:00 (192.168.1.100)
user2    tty1         2023-10-27 10:05
登录后复制

从这个输出,你可以清晰地看到

user1
登录后复制
是从
192.168.1.100
登录后复制
通过
pts/0
登录后复制
登录的,而
user2
登录后复制
是从本地控制台
tty1
登录后复制
登录的。
who
登录后复制
的优点在于它提供了会话的上下文,对于需要追踪用户登录来源的场景非常实用。我常常用它来检查是否有未授权的远程登录。

w
登录后复制
命令是这三者中最“信息密集”的。它在
who
登录后复制
的基础上,增加了更多关于用户活动的信息,包括:

当贝AI
当贝AI

免登录体验DeepSeek满血版

当贝AI 553
查看详情 当贝AI
  • USER: 用户名
  • TTY: 终端线路
  • FROM: 远程主机名或IP地址
  • LOGIN@: 登录时间
  • IDLE: 空闲时间
  • JCPU: 所有由该用户启动的进程所消耗的CPU时间(包括后台进程)
  • PCPU: 当前用户正在运行的进程所消耗的CPU时间
  • WHAT: 用户当前正在执行的命令及参数
 10:30:00 up  1 day,  2:30,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user1    pts/0    192.168.1.100    10:00    30s    0.05s  0.01s sshd: user1@pts/0
user2    tty1                      10:05    1m     0.10s  0.02s bash
登录后复制

w
登录后复制
命令的强大之处在于它能让你快速了解每个在线用户“正在干什么”。这对于系统管理员进行故障排除、性能监控或安全审计都非常有价值。比如,如果我看到某个用户的
WHAT
登录后复制
列显示一个异常的命令,或者
PCPU
登录后复制
很高,我就知道可能需要进一步调查了。在我看来,
w
登录后复制
是一个实时诊断工具,它提供的动态信息远超其他两个命令。

在Shell脚本中,如何安全有效地获取当前用户信息,并处理多用户登录的情况?

在Shell脚本中获取用户信息,往往涉及到自动化任务或权限控制,因此“安全”和“有效”是两个核心考量。我个人在编写脚本时,会根据需求选择不同的命令,并加入一些逻辑判断。

最直接获取当前脚本执行用户名的命令依然是

whoami
登录后复制
。它的输出非常干净,可以直接赋值给变量:

CURRENT_USER=$(whoami)
echo "当前脚本执行用户是: $CURRENT_USER"
登录后复制

这种方式简单可靠,适用于只需要确认脚本运行身份的场景。

当需要处理“多用户登录”或更复杂的系统状态时,情况就有些不同了。如果你想在脚本中获取所有在线用户的列表,并对他们进行迭代处理,

who
登录后复制
users
登录后复制
结合
awk
登录后复制
cut
登录后复制
是不错的选择。

例如,获取所有在线用户的唯一用户名列表:

ONLINE_USERS=$(users | tr ' ' '\n' | sort -u)
echo "当前在线用户列表:"
for user in $ONLINE_USERS; do
    echo "- $user"
done
登录后复制

这里

users
登录后复制
命令的输出可能是一个空格分隔的字符串,
tr ' ' '\n'
登录后复制
将空格替换为换行符,
sort -u
登录后复制
则用于去重,确保每个用户只出现一次。

如果需要更详细的会话信息,比如每个用户的登录IP,

who
登录后复制
命令的输出就需要更精细的解析。一个常见的挑战是
who
登录后复制
的输出格式可能因系统而异,但通常可以通过
awk
登录后复制
grep
登录后复制
进行模式匹配:

echo "当前所有登录会话详情:"
who | while read USER TTY LOGIN_DATE LOGIN_TIME FROM; do
    # 这里的FROM可能包含括号,需要进一步处理
    FROM=$(echo "$FROM" | tr -d '()') # 移除括号
    if [[ -z "$FROM" ]]; then
        FROM="本地"
    fi
    echo "用户: $USER, 终端: $TTY, 登录时间: $LOGIN_DATE $LOGIN_TIME, 来源: $FROM"
done
登录后复制

这段脚本通过

while read
登录后复制
逐行读取
who
登录后复制
的输出,并将其解析到不同的变量中。这里我特别处理了
FROM
登录后复制
字段可能包含括号的情况,并将其移除,如果
FROM
登录后复制
为空,则标记为“本地”,这样输出会更清晰。

在处理多用户登录时,一个常见的安全考虑是避免泄露敏感信息,或者误操作其他用户的会话。我的建议是,在脚本中对获取到的用户信息进行操作时,始终加上严格的权限检查和用户身份验证。例如,在对某个用户的文件进行操作前,先确认操作用户是否是该文件的所有者或具有相应权限。

# 示例:检查某个用户是否在线,并执行特定操作
TARGET_USER="testuser"
if users | grep -qw "$TARGET_USER"; then
    echo "$TARGET_USER 正在在线。"
    # 这里可以添加对testuser相关资源的操作,但要确保权限
    # 例如:sudo -u "$TARGET_USER" /path/to/script_for_testuser.sh
else
    echo "$TARGET_USER 不在线。"
fi
登录后复制

grep -qw
登录后复制
会精确匹配整个单词,避免匹配到部分用户名。这种方式既能有效获取信息,又能保证脚本在复杂多用户环境下的健壮性和安全性,避免不必要的风险。毕竟,在服务器环境中,一个脚本的误操作可能导致严重的后果,所以细致的判断和处理是必不可少的。

以上就是Linux查看当前登录用户的命令的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号