在最近的漏洞披露之后搜索系统解决的服务时,我发现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上检查此问题吗?
/lib/systemd
安装?它是哪种文件系统?如果是单独的挂载点,什么时候挂载?
strace
吗,例如使用?您在哪个操作系统上观察到错误行为?“返回0或两个以上的结果”是什么意思?零或两行输出,还是退出代码0 +两行?启动新的Shell或重新启动后是否会再次发生?可能与第一个调用仅返回文件,而第二个调用返回文件和目录有关。