如何获取所有用户并回显他们是否工作?

如何获取所有用户并回显他们是否工作?

grep如果用户已登录/工作或未登录,如何获取用户列表(从命令行给出)及其输出?

答案1

 perl -le 'print while $_=getpwent' | sort

将为您提供用户名列表。

 ps -eo user= | sort -u

将为您提供一系列用户名,其对应的 uid 是至少一个正在运行的进程的有效用户 id。

 who | awk '{print $1}' | sort -u

将列出当前用户登录

 printf '%s\n' "$@" | sort -u

将列出作为参数传递给脚本的用户。

现在您已经有了这 4 个列表,您可以使用该comm命令来选择其中哪些是任意两个给定列表所共有的,或者出现在一个列表中但不出现在另一个列表中。

使用支持进程替换的 shell,您也可以不创建临时文件。

例如:

#! /bin/bash -
comm -12 <(printf '%s\n' "$@" | sort -u) \
         <(ps -eo user= | sort -u)

称为:

./my-script root mythul stephane

将报告这 3 个用户中哪一个正在运行进程(假设系统上的用户名和 uid 之间存在一对一的关系)。

相关内容