who
命令是 Linux 系统管理中的一个强大工具,它能够显示当前登录到系统的用户信息。当需要将这些信息嵌入脚本以实现自动化或监控目的时,掌握其用法和选项就显得尤为重要。
who
命令基础who
命令默认会显示所有通过终端(TTY)登录的用户列表。输出通常包括用户名、主机名以及登录时间等信息。
$ who
示例输出:
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user1 pts/0 192.168.1.100 07:34am 5:47m 0.01s 0.01s /bin/bash
who
命令的选项who
命令提供了多种选项,可用于获取特定类型的信息。
-b
: 显示系统上一次引导的时间。-d
: 显示最近一次的关机或重启时间。-H, --headers
: 指示 who
输出包含标题行。-q
: 只显示系统上次启动时间。-u
: 以用户为中心的输出格式,包括已登录、空闲时间和会话状态。$ who -b
示例输出:
reboot system boot 5.10.0-26-generic Thu Sep 30 08:00:00 2021
who
命令在脚本中的使用可以将 who
的输出直接用于条件判断或日志记录。例如,编写一个简单脚本来检查是否有其他管理员登录:
#!/bin/bash
# 使用 who -q 检查系统最后一次启动时间
last_boot=$(who -b | awk '{print $5, $6}')
if [ $(who | grep 'admin' > /dev/null; echo $? ) -eq 0 ]; then
echo "警告:用户 admin 已登录。上一次系统引导时间是 $last_boot"
else
echo "当前没有 admin 用户登录,系统最后一次启动时间是 $last_boot"
fi
who
过滤特定用户有时候需要根据用户名过滤输出,例如监控是否有人在周末或非工作时段登录。可以使用 grep
或者 awk
来实现:
#!/bin/bash
# 获取所有用户并过滤出 admin 用户
admin_users=$(who | grep 'admin')
if [ -z "$admin_users" ]; then
echo "没有发现任何 admin 用户登录"
else
echo "以下 admin 用户已登录:$admin_users"
fi
who
和其他命令除了直接使用 who
命令外,还可以将其与 grep
, awk
, 或其他 Linux 命令结合使用以实现更复杂的逻辑:
#!/bin/bash
# 获取所有超过10分钟未响应的用户
inactive_users=$(who -q | awk '{print $5, $6}' | while read line; do
idle_time=$(echo $line | awk '{print $2}')
if [ "$idle_time" -gt 10 ]; then
echo $line
fi
done)
if [ -z "$inactive_users" ]; then
echo "所有用户都在活动状态"
else
echo "以下用户的会话超时:$inactive_users"
fi
通过这些示例和技巧,你可以在脚本中有效地利用 who
命令来监控系统状态或执行特定任务。