使用who、w、last和loginctl命令可查看Linux系统中的活跃用户会话:who显示登录用户基本信息,w提供更详细的实时活动信息,last查看历史登录记录,loginctl用于Systemd系统中管理会话;通过区分tty(本地)、pts(远程SSH)和图形会话(:0),结合w和grep过滤、screen/tmux会话复用,以及loginctl或pkill管理会话,实现高效监控与控制。

在Linux系统中,想要查看当前有哪些用户活跃地登录着,或者有哪些会话正在运行,我们通常会用到几个核心命令:
who
w
last
loginctl
解决方案: 要列出当前系统的活跃会话,最直接的方法就是使用命令行工具。
who
who
举个例子,你可能会看到这样的输出:
user1 tty1 2023-10-27 10:00 (:0) user2 pts/0 2023-10-27 10:30 (192.168.1.100)
这告诉我
user1
user2
192.168.1.100
w
who
w
输出会像这样:
10:45:01 up 1 day, 1:23, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT user1 tty1 :0 10:00 1:20m 0.03s 0.03s /usr/lib/gnome-shell/gnome-shell user2 pts/0 192.168.1.100 10:30 0.00s 0.06s 0.02s bash
这里,
user1
user2
bash
如果你想查看更久远的登录记录,
last
/var/log/wtmp
last
输出可能会很长,但它能让你回溯到过去,看看谁在什么时候登录过系统,以及停留了多久。
user2 pts/0 192.168.1.100 Fri Oct 27 10:30 still logged in user1 tty1 :0 Fri Oct 27 10:00 still logged in reboot system boot 5.15.0-86-generi Fri Oct 27 08:00 - 10:45 (02:45) ...
对于使用Systemd的现代Linux发行版(比如Ubuntu 16.04+,CentOS 7+),
loginctl
loginctl list-sessions
这个命令会列出所有当前活跃的Systemd会话,包括会话ID、用户、终端、以及会话类型。
SESSION UID USER SEAT TTY
100 1000 user1 seat0 tty1
101 1001 user2 pts/0如果你想看某个特定会话的详细信息,可以使用
loginctl show-session <SESSION_ID>
loginctl show-session 100
这会输出大量关于该会话的元数据,包括它的状态、所属进程等。
在Linux环境中,会话的类型其实挺多的,理解它们对于系统管理和安全审计都挺重要的。从我个人的经验来看,主要可以分为几种:本地终端会话、图形桌面会话和远程会话。
本地终端会话通常指的是直接连接到物理机器的键盘和显示器,通过Ctrl+Alt+F1到F6切换的那些字符界面(TTY)。在
who
w
tty1
tty2
图形桌面会话,比如GNOME、KDE、Xfce等,虽然最终也可能运行在一个TTY之上(比如
tty1
who
w
tty1
(:0)
loginctl
TTY
tty1
TYPE
x11
wayland
远程会话,最常见的就是通过SSH(Secure Shell)连接的。当你通过PuTTY或者
ssh
pts/0
pts/1
pts
who
w
FROM
理解这些区分,比如看到一个
pts
FROM
localhost
pts

仅仅知道有哪些会话在运行,有时候还不够。作为系统管理员,或者一个需要保持工作不中断的开发者,我们可能还需要对会话进行更深层次的监控甚至干预。
一个非常常见的场景是,我通过SSH连接到服务器,但网络不稳定或者我需要关闭本地电脑。这时,
screen
tmux
screen
tmux
tmux
tmux
在
tmux
Ctrl+b d
d
tmux attach
这极大地提高了远程工作的灵活性和效率。
从管理的角度看,有时候我们可能需要终止一个用户的会话,比如某个用户占用了过多资源,或者发现异常登录。这里需要非常小心,因为强制终止会话可能会导致用户数据丢失或程序异常退出。
对于一个
pts
pkill
w
user2
pts/0
pkill -KILL -t pts/0
这个命令会向
pts/0
KILL
KILL
对于Systemd管理的会话,
loginctl
loginctl terminate-session <SESSION_ID>
例如:
loginctl terminate-session 101
这会尝试优雅地终止ID为101的会话。它通常会比
pkill -KILL
此外,如果你想进行更全面的用户活动审计,可以考虑配置
auditd
auditd

在多用户或服务器环境中,会话管理就不仅仅是“看看谁在”那么简单了,它上升到了资源分配、安全审计和故障排查的层面。我个人在管理多台服务器时,会结合使用前面提到的命令,并辅以一些脚本和习惯。
w
idle
结合
grep
w | grep myuser
或者,我只想看远程SSH会话,排除本地终端:
who | grep pts
这样可以快速定位到我关心的信息,避免被无关内容淹没。
对于持续监控,我可能会编写一个简单的脚本,定期运行
w
loginctl list-sessions
在资源管理方面,如果发现某个用户进程占用了大量CPU或内存,首先会通过
w
top
ps auxf
kill -TERM <PID>
kill -KILL <PID>
最后,我想说的是,在多用户环境中管理
以上就是Linux如何列出当前系统的活跃会话的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号