如何在ls命令后搜索特定字符串

时间:2014-05-03 16:02:28

标签: linux shell unix ubuntu

我正在尝试创建一个搜索/ proc目录的shell脚本,并找到该进程的用户。我该怎么做?我正在尝试与grep一样的不同方式

NUM=`egrep -ri  "$a1" /proc/ 2> error.txt ` 
echo "$NUM"

但没有任何事情发生。有人帮忙吗?

3 个答案:

答案 0 :(得分:1)

grep搜索文件内容。要搜索someone拥有的文件,请尝试

find /proc -user someone -ls

琐碎的是,您可以通过过滤器管道ls,只获取第三个字段为someone的行,如评论中所示;

ls -l | awk '$3=="someone"'

......但由于种种原因,你应该avoid parsing ls output一般。

如果您知道数字用户ID,则可以执行类似

的操作
awk '$1=="Uid" && $2==1234 { print FILENAME }' /proc[1-9]*/status

获取UID编号1234所拥有的进程的文件名。find可以获得非常相似的内容,如第一个示例中所示。 (也许将搜索限制为只有数字目录名?)

答案 1 :(得分:1)

要通过/ proc伪文件系统查找进程的用户标识,请从“状态”文件中获取“Uid”行:

uid_line=`grep -e ^Uid /proc/1/status`

您可以将其解析为真实,有效,已保存的集和文件系统uid。第二个字段是真正的uid:

real_uid=`echo "$uid_line"|cut -f 2`

您还可以使用getent

username=`getent passwd $real_uid|cut -d: -f 1`

答案 2 :(得分:0)

我非常确定进程的用户标识位于/ proc / PID / loginid。