Linux find命令行为异常


14

在最近的漏洞披露之后搜索系统解决的服务时,我发现find命令的行为非常奇怪。

 root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz

该命令返回0或两行作为第一次运行的输出。但是,如果我第二次运行命令,则会得到:

root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
./lib/systemd/systemd-resolved
./lib/systemd/system/systemd-resolved.service.d
./lib/systemd/system/systemd-resolved.service

这意味着第一次“查找”并没有真正找到所有内容。同样,这仅发生一次。下次运行该命令将显示正确的输出。我在其他安装了Debian 8(jessie)的系统上进行了检查。在使用内核4.9+的计算机上,始终会出现此确切问题,但在具有内核3.16的系统上则不会发生。
系统重启后,所有这些再次发生。但是,每个系统的行为都是相同的。这意味着,如果在特定系统上进行的测试(错误地)返回两行用于第一次运行的输出,而正确地输出用于第二次运行的输出,则在重新引导系统后第一次运行命令将再次输出2行。因此,系统在每次重新启动后都会显示相同的行为(根据我的测试)。文件详细信息如下:

-rw-r--r-- 1 root root  ./usr/share/man/man8/systemd-resolved.service.8.gz
lrwxrwxrwx 1 root root  ./usr/share/man/man8/systemd-resolved.8.gz -> systemd-resolved.service.8.gz
-rwxr-xr-x 1 root root  ./lib/systemd/systemd-resolved
drwxr-xr-x 2 root root  ./lib/systemd/system/systemd-resolved.service.d
-rw-r--r-- 1 root root  ./lib/systemd/system/systemd-resolved.service

编辑:对于所有建议问题的人,这些特定文件可能与此特定情况有关:“ system-resolved ”仅作为示例。搜索其他关键字时也会发生这种情况。这是另一个在第一次运行中给出错误结果的示例:

root@localhost:/# find . -name "*apache*"

不是所有的人都可以在Backport仓库中使用最新内核的Debian 8上检查此问题吗?


2
您可以尝试比较两个调用的痕迹strace吗,例如使用?您在哪个操作系统上观察到错误行为?“返回0或两个以上的结果”是什么意思?零或两行输出,还是退出代码0 +两行?启动新的Shell或重新启动后是否会再次发生?可能与第一个调用仅返回文件,而第二个调用返回文件和目录有关。
l0b0

1
@ l0b0正如我所说的,它发生在Debian的Kernel 4.9多个系统中。我没有检查其他发行版。0或2表示零或两行输出。每次重新启动后都会发生。您的最后声明不适用于此处。它尝试返回所有内容。目录和文件。
user2808671 2015年

1
@ l0b0好吧,我不确定您在寻找什么,但是如您所见,我已经提到了该命令,以便能够重现该问题。该命令必须返回所有包含“ systemd-resolved”的路径,但不会。共有五个路径满足此条件,但是“查找”程序仅返回其中两个或一个或零。这里重要的是该工具输出错误,并且错过了一些正确的路径。正如我提到的,我在其他使用Debian的系统上进行了检查,那些内核4.9的系统存在此问题。这可能是超出用户空间的严重问题。
user2808671 2015年

2
@MarkWagner不。我在gnu findutils和Debian backports邮件列表中都填写了一个错误报告。对我来说,这很严重,因为尽管我不知道你们是否同意我的观点,但这个问题的根源可能会影响许多其他因素。无论如何,“查找”是一种非常流行的工具,其输出必须可靠。
user2808671

2
如何/lib/systemd安装?它是哪种文件系统?如果是单独的挂载点,什么时候挂载?
安德鲁·亨利

Answers:


4

Debian 8上安装的findutils的默认版本为4.4.2,这是jessie信息库上的最新版本。我下载了findutils源代码的最新版本(4.6.0),并从源代码构建了二进制文件。然后我进行了相同的测试,“ find”命令显示了第一次运行的正确输出。

然后,我从gnu存档下载了findutils版本4.4.2源代码并进行了编译。编译的find命令发生了相同的问题。因此,findutils 4.6.0不会发生此问题。

但是我仍然不知道为什么有些用户使用findutils 4.4.2(Debian上安装的实用程序的默认版本)无法获得相同的结果,也不知道为什么仍然应该使用该旧版本的findutils发行Debian。以及其他Linux实用程序,并可能导致这种问题。最后一件事是,仍然不清楚未知事件发生的确切技术原因,这是不可取的。因为我不确定我的操作系统环境中是否存在令人担忧的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.