“查找”是否打开文件?

Tar*_*Tar 5 nginx find

我最近发出了这个命令: find . -type f | wc -l

计算我的 public_html 文件夹中有多少文件。

不久之后,Nginx 返回 500 内部服务器错误并且 error.log 充斥着“打开的文件太多”错误。我想也许这可能是这个问题的根源?

Der*_*rfK 14

看着strace -eopen find . -type f用GNU发现(4.4.2从Debian的挤压)的答案似乎是“不,找不开的文件”,但它确实打开目录:

open("details", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 5
open("..", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 5
open("..", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 5
open("..", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 5
open("..", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 5
open("..", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 5
open("..", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 5
open("..", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 5
open("..", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 5
open(".uml", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 5
open("..", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 5
open(".dbus", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 5
Run Code Online (Sandbox Code Playgroud)

等等。当然,所有这些命令都返回相同的文件句柄#,这强烈暗示 find 再次关闭它们。我创建了一组相当深的目录,似乎 find 用于..上一个目录而不是打开目录。

不过,这似乎确实是一个非常了不起的巧合。