Linux 正在/proc中读取虚拟文件的内容

Linux 正在/proc中读取虚拟文件的内容,linux,bash,grep,Linux,Bash,Grep,我需要在整个Linux文件系统中找到一个字符串,我使用grep在文件系统中找到这个字符串的所有实例。我得到了两种类型的结果:一种来自我的/.bash_history,另一种来自proc目录。人们强烈暗示,答案在于某种过程 /proc结果如下所示: Binary file /proc/12345/task/12345/cmdline matches grep^@-r^@string^@/^@ 当我尝试导航到目录12345时,它不存在。我在redhat手册中读到,/proc文件系统中的文件往往是

我需要在整个Linux文件系统中找到一个字符串,我使用grep在文件系统中找到这个字符串的所有实例。我得到了两种类型的结果:一种来自我的
/.bash_history
,另一种来自
proc
目录。人们强烈暗示,答案在于某种过程

/proc
结果如下所示:

Binary file /proc/12345/task/12345/cmdline matches
grep^@-r^@string^@/^@
当我尝试导航到目录12345时,它不存在。我在redhat手册中读到,/proc文件系统中的文件往往是虚拟的。我猜这个过程可能在grep完成搜索并导航到合适的目录时结束。 是否有一种方法可以在与grep相同的命令中打印进程的内容?在本例中,它返回两个结果。如何阅读每个结果的内容? 谢谢

编辑:我使用
grep-rs“*string\u name*”/
查找字符串

我猜这个过程可能已经结束了

正确:匹配的是您的
grep
流程

当您的
grep
运行时,命令行文件如下所示:

Binary file /proc/12345/task/12345/cmdline matches
grep^@-r^@string^@/^@
其中“有趣”字符是分隔参数的
NUL
字符

是否有一种方法可以在与grep相同的命令中打印进程的内容

从中,似乎将
-a
添加到命令行将打印二进制文件,就像它是文本一样(
grep
认为
cmdline
是二进制文件,因为它包含嵌入的
NUL
s)

我猜这个过程可能已经结束了

正确:匹配的是您的
grep
流程

当您的
grep
运行时,命令行文件如下所示:

Binary file /proc/12345/task/12345/cmdline matches
grep^@-r^@string^@/^@
其中“有趣”字符是分隔参数的
NUL
字符

是否有一种方法可以在与grep相同的命令中打印进程的内容


从中,似乎将
-a
添加到命令行将打印二进制文件,就像它是文本一样(
grep
认为
cmdline
是一个二进制文件,因为它包含嵌入的
NUL
s)。

所以,它不完全匹配?它只是镜像命令行的内容?“它不完全匹配”--是的:它是一个包含字符串的文件(因为字符串是命令行参数)。你关心的不是比赛,而是比赛。一般来说,您可能不关心
/proc
下的任何文件,因为它们都是短暂的。我也猜
。bash_history
也不重要吗?在这种情况下,grep没有返回任何我正在寻找的匹配项。我使用了
grep-rs“*string\u name*”\
,这似乎是唯一的结果。所以,这不完全是一个匹配?它只是镜像命令行的内容?“它不完全匹配”--是的:它是一个包含字符串的文件(因为字符串是命令行参数)。你关心的不是比赛,而是比赛。一般来说,您可能不关心
/proc
下的任何文件,因为它们都是短暂的。我也猜
。bash_history
也不重要吗?在这种情况下,grep没有返回任何我正在寻找的匹配项。我使用了
grep-rs“*string\u name*”\
,这似乎是唯一的结果。由于
grep-r
无法执行此操作,请改用
find/-xdev-type f-exec grep somestring{}+
。还要注意,盲目使用
grep-a
可能会弄乱你的终端。
{}
+
是什么意思?
{}
意味着“替换为找到的任何文件”<代码>+特定于exec,表示“多个文件一起执行”,而
表示“每个文件执行一次”-您通常应该尽可能使用
+
,因为
fork+exec
相对昂贵。通常,您不希望跨越文件系统边界。由于
grep-r
无法执行此操作,请改用
find/-xdev-type f-exec grep somestring{}+
。还要注意,盲目使用
grep-a
可能会弄乱你的终端。
{}
+
是什么意思?
{}
意味着“替换为找到的任何文件”<代码>+特定于exec,表示“多个文件一起执行”,而
表示“每个文件执行一次”-您通常应尽可能使用
+
,因为
fork+exec
相对昂贵。