gpt4 book ai didi

sockets - 为什么 grep 在/目录下运行时会挂起?

转载 作者:行者123 更新时间:2023-12-03 15:24:15 26 4
gpt4 key购买 nike

我的问题分为两部分:

1) 当我 grep "/"下的所有文件时,为什么 grep 挂起?

例如 :

grep -r 'h' ./

(注意:就在挂起/崩溃之前,我注意到我看到一些关于套接字的“没有这样的设备或地址”消息......

当然,我知道 grep 不应该针对套接字运行,但我认为由于套接字只是 Unix 中的文件,因此它应该返回否定结果,而不是崩溃。

2)现在,我的后续问题:无论如何——我怎样才能grep整个文件系统?在执行此操作时,是否应该忽略某些 *NIX 目录?特别是,我正在寻找所有最近写入的日志文件。

最佳答案

正如@ninjalj 所说,如果你不使用 -D skip , grep将尝试读取您所有的设备文件、套接字文件和 FIFO 文件。特别是在 Linux 系统(和许多 Unix 系统)上,它会尝试读取 /dev/zero ,这似乎是无限长的。

你会等一段时间。

如果您正在寻找系统日志,请从 /var/log 开始可能是最好的方法。

如果您正在寻找真正可能位于文件系统中任何位置的内容,您可以执行以下操作:

find / -xdev -type f -print0 | xargs -0 grep -H pattern
-xdev论据 find告诉它留在单个文件系统中;这将避免 /proc/dev (以及任何已安装的文件系统)。 -type f将搜索限制为普通文件。 -print0打印由空字符而不是换行符分隔的文件名;这可以避免文件名称中包含空格或其他有趣字符的问题。
xargs在其标准输入上读取文件名(或其他任何内容)列表,并对列表中的所有内容调用指定的命令。 -0选项适用于 find-print0 .
-H选项 grep告诉它在每个匹配项前加上文件名。默认情况下, grep仅当其命令行上有两个或多个文件名时才执行此操作。自 xargs将其参数分成批次,最后一批可能只有一个文件,这会给您带来不一致的结果。

考虑使用 find ... -name '*.log'将搜索限制为名称以 .log 结尾的文件(假设您的日志文件具有这样的名称),和/或使用 grep -I ...跳过二进制文件。

请注意,这一切都取决于特定于 GNU 的功能。其中一些选项在 MacOS(基于 BSD)或其他 Unix 系统上可能不可用。查阅您的本地文档,并考虑安装 GNU findutils(用于 findxargs)和/或 GNU grep。

在尝试任何这些之前,请使用 df看看你的根文件系统有多大。我的目前是 268 GB;搜索所有这些可能需要几个小时。花几分钟 (a) 限制您搜索的文件和 (b) 确保命令正确,将非常值得您花时间。

关于sockets - 为什么 grep 在/目录下运行时会挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7971089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com