如果我发现有两个用户登录到系统中(UserA和UserB),那么我该如何找出这两个用户运行的进程。但是,这里的诀窍是脚本将在没有任何键盘输入的情况下在无人参与的批处理中运行。除了被调用。使用unix脚本来获取用户运行的进程
我知道脚本的第一部分是 谁| AWK“{打印$ 1}” 这个输出是 用户A 用户B
我想知道的是,我该如何使用这个输出,并与一些ps命令自动推它,并获得所需的结果。
如果我发现有两个用户登录到系统中(UserA和UserB),那么我该如何找出这两个用户运行的进程。但是,这里的诀窍是脚本将在没有任何键盘输入的情况下在无人参与的批处理中运行。除了被调用。使用unix脚本来获取用户运行的进程
我知道脚本的第一部分是 谁| AWK“{打印$ 1}” 这个输出是 用户A 用户B
我想知道的是,我该如何使用这个输出,并与一些ps命令自动推它,并获得所需的结果。
我终于找到了我正在寻找的单线程,在其他答案的帮助下(更新了,如果没有用户登录 - 看评论)。
ps -fU "`who | cut -d' ' -f1 | uniq | xargs echo`" 2> /dev/null
反引号内的东西被执行,并被“插入现场”。其工作原理如下:
who : you know what that does
cut -d' ' : split strings into fields, using ' ' as separator
-f1 : and return only field 1
uniq : return only unique entries
xargs echo : take each of the values piped in, and send them through echo: this strips the \n
2> /dev/null : if there are any error messages (sent to 2: stderr)
: redirect those to /dev/null - i.e. "dump them, never to be seen again"
的所有输出是
user1 user2 user3
...然而,许多有。而你再打电话ps
与-fU
标志,要求这些用户的所有过程全格式(当然你也可以改变这些标志来得到你想要的格式,只是不停地在那里-U
只是事情之前在“``”
ps -fU user1 user2 user3
不知道如果我正确理解你的问题,但你可以管PS的通过grep的输出获得的过程由特定用户运行的,就像这样:
ps -ef | grep '^xxxxx '
其中xxxxx是用户。
如何在没有我输入当前登录人员的用户ID的情况下自动执行此操作。因此,who命令应该自动转到ps命令并提供所需的结果。我该怎么做? ? – anansharm
获取用户(使用谁)的列表,保存到一个文件,然后列出所有的进程,和grep那(使用您刚刚创建的文件),
tempfile=/tmp/wholist.$$
who | cut -f1 -d' '|sort -u > $tempfile
ps -ef |grep -f $tempfile
rm $tempfile
LOGGED_IN=$(who | awk '{print $1}' | sort -u | xargs echo)
[ "$LOGGED_IN" ] && ps -fU "$LOGGED_IN"
的standard switch -U
将限制输出到只有那些真实用户ID对应于任何给定的参数的进程。 (例如,ps -f -U“UserA UserB”)。
你的回答激发了我对于我提出的单线 - “只是因为我不得不”。谢谢。 – Floris
你有没有在使用'ps'命令来做到这一点? – chepner
不,我不知道如何把出了谁命令ps命令来获得由目前的用户运行的进程失败的尝试登录。 – anansharm