我有两个关于 grep 命令使用的简单问题。
我想做的是:
- 显示以我身份运行的总行数(进程),除了我们用于创建列表的命令之外。
- 接下来,我想修改以我身份运行的总行列表,并且仅将 userID 和 PID 解析到新列表中。
对于第一个,我认为类似 ( ps -ef | grep myusername | grep -v "somecommand" | wc -l
) 的内容就足够了,但我不确定在某个进程中输入什么来编辑用于生成列表的命令。
对于第二个问题,我不知道如何处理。
答案1
要列出用户的所有进程(除了我们用于创建列表的命令之外),您可以使用:
ps -U username -u username u | grep -v ps
它将所有启动的进程username
作为真实用户 ID 和有效用户 ID 列出,并过滤进程ps
以避免列出用于创建列表的命令。
另一种(用户和PID):
ps -U username -u username u | grep -v ps | awk {'print $1, $2'}
awk
用于仅显示结果的第 1 列和第 2 列。
答案2
对于第一个问题,您可以使用ps
以下选项来列出使用您的用户名运行的所有进程。
$ ps -o pid,uid -u 1000|wc -l
您可以将该值替换1000
为您的用户的 UID。我只添加了pid
和uid
来显示。您可以任意添加。
对于第二种情况与第一种情况相同
$ ps -o pid,uid -u 1000 > process.list
答案3
对于第一个问题,您可以使用 grep 的 -c 命令,它会给出匹配项的计数。
ps -ef | grep -v "grep" | grep -c "username"
这会列出所有进程,然后删除 grep 本身(不计算我们用于获取列表的进程),然后获取来自您的用户名的总计数。