1. 首页 > Linux教程 > 正文

Linux教程FG060-who/whoami/w命令(用户登录信息查看)

本文档风哥主要介绍Linux系统中who、whoami、w命令的使用方法,包括用户登录信息查看、当前用户查看、用户活动监控等,结合RHEL LINUX 10系统环境,提供详细的命令示例和输出结果,适合Linux运维人员在学习和生产环境中使用。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 who/whoami/w命令的基本概念

who命令用于显示当前登录系统的用户信息,包括用户名、登录终端、登录时间、来源IP等。whoami命令用于显示当前用户的用户名。w命令用于显示当前登录系统的用户信息及其正在执行的进程,是who命令的增强版。这三个命令是Linux系统中常用的用户信息查看工具,可以帮助管理员监控系统用户活动。

who/whoami/w命令的特点:

  • who:显示所有登录用户信息
  • whoami:显示当前用户名
  • w:显示用户信息及活动
  • who:显示基本信息
  • w:显示详细信息
  • 可以监控系统用户活动

1.2 who/whoami/w命令的语法格式

who、whoami、w命令的基本语法格式如下:

# who命令基本语法
who [选项] [文件]

# whoami命令基本语法
whoami [选项]

# w命令基本语法
w [选项] [用户名]

# 语法说明:
# 文件:指定记录登录信息的文件,默认为/var/run/utmp
# 用户名:指定要查看的用户名

1.3 who/whoami/w命令的常用参数

who、whoami、w命令的常用参数如下:

# who命令常用参数

# -a, –all
# 显示所有信息
who -a

# -b, –boot
# 显示系统最后启动时间
who -b

# -d, –dead
# 显示死进程
who -d

# -H, –heading
# 显示标题行
who -H

# -l, –login
# 显示系统登录进程
who -l

# -m
# 只显示当前终端的用户
who -m

# -p, –process
# 显示由init进程启动的活动进程
who -p

# -q, –count
# 显示登录用户数量
who -q

# -r, –runlevel
# 显示当前运行级别
who -r

# -s, –short
# 显示简短信息(默认)
who -s

# -t, –time
# 显示系统时钟最后修改时间
who -t

# -T, -w, –mesg
# 显示用户的消息状态
who -T

# -u, –users
# 显示登录用户
who -u

# –version
# 显示版本信息
who –version

# –help
# 显示帮助信息
who –help

# whoami命令常用参数

# –version
# 显示版本信息
whoami –version

# –help
# 显示帮助信息
whoami –help

# w命令常用参数

# -h, –no-header
# 不显示标题行
w -h

# -u, –no-current
# 忽略当前进程的用户名
w -u

# -s, –short
# 显示简短信息
w -s

# -f, –from
# 显示来源字段(默认)
w -f

# -o, –old-style
# 使用旧式输出
w -o

# –version
# 显示版本信息
w –version

# –help
# 显示帮助信息
w –help

Part02-生产环境规划与建议

2.1 用户信息查看场景规划

在生产环境中,who、whoami、w命令主要用于以下场景:

# 用户信息查看场景规划

# 1. 用户监控场景
# – 查看当前登录用户
# – 监控用户活动
# – 查看用户登录时间
# – 查看用户来源IP

# 2. 安全审计场景
# – 检查异常登录
# – 查看用户登录历史
# – 监控root用户登录
# – 检查用户权限

# 3. 系统管理场景
# – 查看系统运行级别
# – 查看系统启动时间
# – 查看登录进程
# – 查看用户会话

# 4. 脚本应用场景
# – 获取当前用户名
# – 检查用户是否登录
# – 统计登录用户数
# – 记录用户活动

2.2 用户信息查看安全建议

在生产环境中使用who、whoami、w命令时,需要注意以下安全建议:

用户信息查看安全建议:

  • 定期检查登录用户
  • 监控异常登录行为
  • 检查root用户登录
  • 记录用户活动日志
  • 限制用户登录权限
  • 使用SSH密钥认证

2.3 用户信息查看最佳实践

who、whoami、w命令在生产环境中的最佳实践:

# 用户信息查看最佳实践

# 1. 定期检查登录用户
# w | mail -s “Current logged users” admin@fgedu.net

# 2. 监控root用户登录
# who | grep root

# 3. 检查异常登录
# who | awk ‘{print $1}’ | sort | uniq -c | sort -rn

# 4. 记录用户活动
# w >> /var/log/user_activity.log

# 5. 检查用户权限
# id $(whoami)

# 6. 查看用户登录历史
# last | head -n 20

Part03-生产环境项目实施方案

3.1 who命令实战操作

who命令在RHEL LINUX 10系统中的实际操作示例:

# who命令实战操作示例

# 1. 显示当前登录用户
# who
root pts/0 2026-04-02 10:00 (192.168.1.100)
user1 pts/1 2026-04-02 10:05 (192.168.1.101)
user2 pts/2 2026-04-02 10:10 (192.168.1.102)

# 2. 显示所有信息
# who -a
system boot 2026-04-02 09:00
run-level 3 2026-04-02 09:00
root + pts/0 2026-04-02 10:00 . 12345 (192.168.1.100)
user1 + pts/1 2026-04-02 10:05 . 12346 (192.168.1.101)
user2 + pts/2 2026-04-02 10:10 . 12347 (192.168.1.102)

# 3. 显示系统启动时间
# who -b
system boot 2026-04-02 09:00

# 4. 显示当前运行级别
# who -r
run-level 3 2026-04-02 09:00

# 5. 显示标题行
# who -H
NAME LINE TIME COMMENT
root pts/0 2026-04-02 10:00 (192.168.1.100)
user1 pts/1 2026-04-02 10:05 (192.168.1.101)

# 6. 显示登录用户数量
# who -q
root user1 user2
# users=3

# 7. 显示用户消息状态
# who -T
root + pts/0 2026-04-02 10:00 (192.168.1.100)
user1 + pts/1 2026-04-02 10:05 (192.168.1.101)
user2 – pts/2 2026-04-02 10:10 (192.168.1.102)
(+表示允许消息,-表示禁止消息)

# 8. 显示当前终端用户
# who am i
root pts/0 2026-04-02 10:00 (192.168.1.100)

# 9. 显示登录进程
# who -l
LOGIN tty1 2026-04-02 09:00 1234 id=tty1

# 10. 显示死进程
# who -d

# 11. 显示所有登录用户
# who -u
root pts/0 2026-04-02 10:00 . 12345 (192.168.1.100)
user1 pts/1 2026-04-02 10:05 . 12346 (192.168.1.101)
user2 pts/2 2026-04-02 10:10 . 12347 (192.168.1.102)

# 12. 显示系统时钟最后修改时间
# who -t

# 13. 显示简短信息
# who -s
root pts/0 2026-04-02 10:00 (192.168.1.100)
user1 pts/1 2026-04-02 10:05 (192.168.1.101)

# 14. 显示init进程启动的活动进程
# who -p

# 15. 查看特定文件中的登录信息
# who /var/run/utmp
root pts/0 2026-04-02 10:00 (192.168.1.100)

3.2 whoami命令实战操作

whoami命令在RHEL LINUX 10系统中的实际操作示例:

# whoami命令实战操作示例

# 1. 显示当前用户名
# whoami
root

# 2. 在脚本中使用
# cat > /tmp/check_user.sh << 'EOF' #!/bin/bash CURRENT_USER=$(whoami) if [ "$CURRENT_USER" != "root" ]; then echo "Error: This script must be run as root" exit 1 fi echo "Running as root" EOF # chmod +x /tmp/check_user.sh # /tmp/check_user.sh Running as root # 3. 检查用户权限 # id $(whoami) uid=0(root) gid=0(root) groups=0(root) # 4. 检查用户组 # groups $(whoami) root : root # 5. 检查用户主目录 # echo $HOME /root # 6. 检查用户Shell # echo $SHELL /bin/bash # 7. 检查用户ID # echo $UID 0 # 8. 检查用户环境变量 # env | grep USER USER=root # 9. 切换用户后检查 # su - user1 $ whoami user1 # 10. 使用sudo后检查 # sudo -u user1 whoami user1 # 11. 显示版本信息 # whoami --version whoami (GNU coreutils) 8.32 Copyright (C) 2020 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Richard M. Stallman and David MacKenzie.

# 12. 显示帮助信息
# whoami –help
Usage: whoami [OPTION]…
Print the user name associated with the current effective user ID.
Same as id -un.

–help display this help and exit
–version output version information and exit

GNU coreutils online help:
Full documentation
or available locally via: info ‘(coreutils) whoami invocation’

# 13. 与id命令对比
# id -un
root
(与whoami输出相同)

# 14. 在定时任务中使用
# cat > /etc/cron.d/check_user << 'EOF' * * * * * root echo "Current user: $(whoami)" >> /var/log/user_check.log
EOF

# 15. 在系统服务中使用
# cat > /etc/systemd/system/check_user.service << 'EOF' [Unit] Description=Check current user [Service] Type=oneshot ExecStart=/usr/bin/whoami [Install] WantedBy=multi-user.target EOF

3.3 w命令实战操作

w命令在RHEL LINUX 10系统中的实际操作示例:

# w命令实战操作示例

# 1. 显示当前登录用户及活动
# w
10:00:00 up 1:00, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.100 10:00 1.00s 0.05s 0.01s w
user1 pts/1 192.168.1.101 10:05 5:00 0.10s 0.05s vim file.txt
user2 pts/2 192.168.1.102 10:10 0.00s 0.15s 0.10s top

# 2. 显示简短信息
# w -s
10:00:00 up 1:00, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM IDLE WHAT
root pts/0 192.168.1.100 1.00s w
user1 pts/1 192.168.1.101 5:00 vim file.txt
user2 pts/2 192.168.1.102 0.00s top

# 3. 不显示标题行
# w -h
root pts/0 192.168.1.100 10:00 1.00s 0.05s 0.01s w
user1 pts/1 192.168.1.101 10:05 5:00 0.10s 0.05s vim file.txt
user2 pts/2 192.168.1.102 10:10 0.00s 0.15s 0.10s top

# 4. 显示特定用户
# w root
10:00:00 up 1:00, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.100 10:00 1.00s 0.05s 0.01s w

# 5. 忽略当前进程的用户名
# w -u
10:00:00 up 1:00, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.100 10:00 1.00s 0.05s 0.01s w
user1 pts/1 192.168.1.101 10:05 5:00 0.10s 0.05s vim file.txt
user2 pts/2 192.168.1.102 10:10 0.00s 0.15s 0.10s top

# 6. 使用旧式输出
# w -o
10:00:00 up 1:00, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.100 10:00 1.00s 0.05s 0.01s w
user1 pts/1 192.168.1.101 10:05 5:00 0.10s 0.05s vim file.txt
user2 pts/2 192.168.1.102 10:10 0.00s 0.15s 0.10s top

# 7. 显示版本信息
# w –version
w from procps-ng 3.3.17

# 8. 显示帮助信息
# w –help
Usage:
w [options]
Options:
-h, –no-header do not print header
-u, –no-current ignore current process username
-s, –short short format
-f, –from show remote hostname field
-o, –old-style old style output
–help display this help and exit
-V, –version output version information and exit

For more details see w(1).

# 9. 解析w命令输出
# w | tail -n +2 | awk ‘{print $1}’ | sort | uniq -c
1 root
1 user1
1 user2

# 10. 统计登录用户数
# w | tail -n +2 | wc -l
3

# 11. 查看用户正在执行的命令
# w | grep root
root pts/0 192.168.1.100 10:00 1.00s 0.05s 0.01s w

# 12. 查看用户空闲时间
# w | awk ‘{print $1, $5}’
USER IDLE
root 1.00s
user1 5:00
user2 0.00s

# 13. 查看用户CPU使用时间
# w | awk ‘{print $1, $6}’
USER JCPU
root 0.05s
user1 0.10s
user2 0.15s

# 14. 查看用户登录来源
# w | awk ‘{print $1, $3}’
USER FROM
root 192.168.1.100
user1 192.168.1.101
user2 192.168.1.102

# 15. 监控用户活动
# watch -n 5 w
(每5秒刷新一次用户活动)

Part04-生产案例与实战讲解

4.1 用户管理案例

使用who、whoami、w命令进行用户管理:

# 用户管理案例

# 1. 检查当前登录用户
# cat > /usr/local/bin/check_users.sh << 'EOF' #!/bin/bash echo "=== Current logged users ===" who echo "" echo "=== User activities ===" w echo "" echo "=== Current user ===" whoami echo "" echo "=== User count ===" who | wc -l EOF # chmod +x /usr/local/bin/check_users.sh # check_users.sh === Current logged users === root pts/0 2026-04-02 10:00 (192.168.1.100) user1 pts/1 2026-04-02 10:05 (192.168.1.101) === User activities === 10:00:00 up 1:00, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.1.100 10:00 1.00s 0.05s 0.01s w user1 pts/1 192.168.1.101 10:05 5:00 0.10s 0.05s vim file.txt === Current user === root === User count === 2 # 2. 监控root用户登录 # cat > /usr/local/bin/monitor_root.sh << 'EOF' #!/bin/bash LOG_FILE="/var/log/root_login.log" while true; do ROOT_COUNT=$(who | grep "^root" | wc -l) if [ $ROOT_COUNT -gt 0 ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] Root user logged in from:" >> $LOG_FILE
who | grep “^root” >> $LOG_FILE
fi
sleep 60
done
EOF

# chmod +x /usr/local/bin/monitor_root.sh

# 3. 检查异常登录
# cat > /usr/local/bin/check_abnormal.sh << 'EOF' #!/bin/bash LOG_FILE="/var/log/abnormal_login.log" # 检查同一用户多次登录 who | awk '{print $1}' | sort | uniq -c | while read count user; do if [ $count -gt 3 ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] User $user has $count sessions" >> $LOG_FILE
fi
done

# 检查非工作时间登录
HOUR=$(date +%H)
if [ $HOUR -lt 6 ] || [ $HOUR -gt 22 ]; then
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] Login outside working hours:” >> $LOG_FILE
who >> $LOG_FILE
fi
EOF

# chmod +x /usr/local/bin/check_abnormal.sh

# 4. 统计用户登录时间
# cat > /usr/local/bin/user_login_time.sh << 'EOF' #!/bin/bash echo "User login time statistics:" echo "============================" who | while read user tty date time from; do LOGIN_TIME=$(date -d "$date $time" +%s) CURRENT_TIME=$(date +%s) DURATION=$((CURRENT_TIME - LOGIN_TIME)) HOURS=$((DURATION / 3600)) MINUTES=$(((DURATION % 3600) / 60)) echo "$user: ${HOURS}h ${MINUTES}m" done EOF # chmod +x /usr/local/bin/user_login_time.sh # 5. 检查用户权限 # cat > /usr/local/bin/check_permissions.sh << 'EOF' #!/bin/bash CURRENT_USER=$(whoami) echo "Current user: $CURRENT_USER" echo "User ID: $(id -u)" echo "Group ID: $(id -g)" echo "Groups: $(id -Gn)" echo "Home: $HOME" echo "Shell: $SHELL" if [ $(id -u) -eq 0 ]; then echo "Running as root!" fi EOF # chmod +x /usr/local/bin/check_permissions.sh

4.2 脚本应用案例

在Shell脚本中使用who、whoami、w命令:

# 脚本应用案例

# 1. 检查脚本是否以root用户运行
# cat > /tmp/require_root.sh << 'EOF' #!/bin/bash if [ $(whoami) != "root" ]; then echo "Error: This script must be run as root" exit 1 fi echo "Running as root, continuing..." EOF # chmod +x /tmp/require_root.sh # 2. 检查用户是否登录 # cat > /tmp/check_login.sh << 'EOF' #!/bin/bash USER=$1 if [ -z "$USER" ]; then echo "Usage: $0
exit 1
fi

if who | grep -q “^$USER”; then
echo “User $USER is currently logged in”
else
echo “User $USER is not logged in”
fi
EOF

# chmod +x /tmp/check_login.sh

# 3. 踢出指定用户
# cat > /tmp/kick_user.sh << 'EOF' #!/bin/bash USER=$1 if [ -z "$USER" ]; then echo "Usage: $0
exit 1
fi

if [ $(whoami) != “root” ]; then
echo “Error: This script must be run as root”
exit 1
fi

TTY=$(who | grep “^$USER” | awk ‘{print $2}’)
if [ -n “$TTY” ]; then
pkill -9 -t $TTY
echo “User $USER has been kicked out”
else
echo “User $USER is not logged in”
fi
EOF

# chmod +x /tmp/kick_user.sh

# 4. 发送消息给所有用户
# cat > /tmp/broadcast.sh << 'EOF' #!/bin/bash MESSAGE=$1 if [ -z "$MESSAGE" ]; then echo "Usage: $0
exit 1
fi

who | awk ‘{print $2}’ | while read tty; do
echo “$MESSAGE” > /dev/$tty
done

echo “Message sent to all users”
EOF

# chmod +x /tmp/broadcast.sh

# 5. 记录用户活动日志
# cat > /tmp/log_users.sh << 'EOF' #!/bin/bash LOG_FILE="/var/log/user_activity.log" while true; do echo "=== $(date '+%Y-%m-%d %H:%M:%S') ===" >> $LOG_FILE
w >> $LOG_FILE
echo “” >> $LOG_FILE
sleep 300
done
EOF

# chmod +x /tmp/log_users.sh

4.3 故障排查案例

使用who、whoami、w命令进行故障排查:

# 故障排查案例

# 1. 排查用户无法登录问题
# 检查用户是否存在
# id username

# 检查用户Shell
# grep username /etc/passwd

# 检查用户是否被锁定
# passwd -S username

# 检查登录日志
# last | grep username

# 2. 排查用户权限问题
# 检查当前用户
# whoami

# 检查用户组
# groups

# 检查用户权限
# id

# 检查sudo权限
# sudo -l

# 3. 排查用户会话问题
# 检查用户会话
# who

# 检查用户进程
# ps aux | grep username

# 检查用户终端
# w username

# 4. 排查系统负载问题
# 检查系统负载
# w | head -n 1

# 检查用户CPU使用
# w | awk ‘{print $1, $6, $7}’

# 检查用户进程
# ps aux –sort=-%cpu | head -n 10

# 5. 排查异常登录问题
# 检查当前登录用户
# who

# 检查登录历史
# last | head -n 20

# 检查失败登录
# lastb | head -n 20

# 检查SSH日志
# grep “Failed password” /var/log/secure

# 6. 排查用户资源占用问题
# 检查用户进程
# ps aux | grep username

# 检查用户内存使用
# ps aux | grep username | awk ‘{sum+=$6} END {print sum/1024 ” MB”}’

# 检查用户CPU使用
# ps aux | grep username | awk ‘{sum+=$3} END {print sum ” %”}’

# 检查用户打开的文件
# lsof | grep username | wc -l

Part05-风哥经验总结与分享

5.1 用户信息查看技巧总结

根据多年的Linux运维经验,总结who、whoami、w命令的使用技巧:

风哥提示:who、whoami、w命令是Linux系统中常用的用户信息查看工具。who用于显示所有登录用户信息,whoami用于显示当前用户名,w用于显示用户信息及活动。在生产环境中,建议定期检查登录用户,监控异常登录行为,记录用户活动日志。记住,用户安全是系统安全的重要组成部分,要时刻关注用户活动!

# who/whoami/w命令使用技巧总结

# 1. 定期检查登录用户
# w | mail -s “Current logged users” admin@fgedu.net

# 2. 监控root用户登录
# who | grep root

# 3. 检查异常登录
# who | awk ‘{print $1}’ | sort | uniq -c | sort -rn

# 4. 记录用户活动
# w >> /var/log/user_activity.log

# 5. 检查用户权限
# id $(whoami)

# 6. 查看用户登录历史
# last | head -n 20

# 7. 检查失败登录
# lastb | head -n 20

# 8. 发送消息给所有用户
# wall “System will reboot in 5 minutes”

5.2 用户信息查看检查清单

在生产环境中使用who、whoami、w命令时的检查清单:

用户信息查看检查清单:

  • 确认当前登录用户
  • 确认用户登录时间
  • 确认用户登录来源
  • 确认用户活动进程
  • 确认用户权限
  • 确认异常登录
  • 确认用户会话
  • 确认系统负载
  • 确认用户资源占用
  • 确认用户登录历史

5.3 相关工具推荐

与who、whoami、w命令相关的工具和替代方案:

# who/whoami/w命令相关工具推荐

# 1. last – 显示用户登录历史
# last | head -n 20
# 优点:可以查看历史登录记录

# 2. lastb – 显示失败登录记录
# lastb | head -n 20
# 优点:可以查看失败登录尝试

# 3. lastlog – 显示所有用户最后登录时间
# lastlog
# 优点:可以查看所有用户的最后登录时间

# 4. users – 显示当前登录用户名
# users
# 优点:简单快速显示用户名

# 5. id – 显示用户信息
# id username
# 优点:可以查看用户ID、组ID等信息

# 6. finger – 显示用户详细信息
# finger username
# 优点:可以查看用户详细信息

# 7. pinky – 轻量级finger
# pinky
# 优点:轻量级用户信息查看工具

# 8. utmpdump – 转储utmp文件
# utmpdump /var/run/utmp
# 优点:可以查看原始登录信息

风哥总结:who、whoami、w命令是Linux系统中常用的用户信息查看工具。who用于显示所有登录用户信息,whoami用于显示当前用户名,w用于显示用户信息及活动。在生产环境中,建议定期检查登录用户,监控异常登录行为,记录用户活动日志。对于更详细的用户信息,可以使用last、lastlog、id等命令。记住,用户安全是系统安全的重要组成部分,要时刻关注用户活动!更多视频教程www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息