在最近的漏洞披露之后搜索系统解析服务,我发现 find 命令出现了一个非常奇怪的行为。
root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
Run Code Online (Sandbox Code Playgroud)
该命令返回 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
Run Code Online (Sandbox Code Playgroud)
这意味着第一次,“查找”实际上并没有找到所有内容。而且这只会发生一次。下次运行命令会显示正确的输出。我在其他一些安装了 Debian 8 (jessie) 的系统上检查了这个。在使用内核 4.9+ 的系统上,这个确切的问题总是会发生,但在使用内核 3.16 的系统上不会发生。
系统重新启动后,这一切再次发生。但是每个单独的系统的行为都是相同的。这意味着如果在特定系统上的测试返回(错误地)第一次运行的两行输出和第二次运行的正确输出,则重新启动系统后第一次运行该命令会打印两行。因此,系统在每次重新启动后都显示相同的行为(根据我的测试)。文件详情如下:
-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
Run Code Online (Sandbox Code Playgroud)
编辑:对于所有提出问题的人来说,这些问题可能与这些特定文件的特定案例有关:“系统已解决”只是一个例子。搜索其他关键字时也会发生这种情况。这是另一个示例,它在第一次运行时给出了错误的结果:
root@localhost:/# find . -name "*apache*"
Run Code Online (Sandbox Code Playgroud)
这里没有人能够在带有最新内核的 Debian 8 上从 backport 存储库检查这个问题吗?