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 之间存在一对一的关系)。